1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
//
//
// util.cpp - Common utilities for printing out messages
//
//
#include <objbase.h>
#include <stdio.h> //sprintf
#include <stdlib.h>
#include <assert.h>
// #include <tchar.h>
#include "util.h"
#ifdef _OUTPROC_SERVER_
// We are building a local or remote server.
// Listbox window handle
extern HWND g_hWndListBox ;
static inline void output(const char* sz)
{
::SendMessage(g_hWndListBox, LB_ADDSTRING, 0, (LPARAM)sz) ;
}
#else
// We are building an in-proc server.
#include <iostream.h>
static inline void output(const char* sz)
{
cout << sz << endl ;
}
#endif //_OUTPROC_SERVER_
//
// Utilities
//
namespace Util
{
//
// Print out a message with a label.
//
void Trace(char* szLabel, char* szText, HRESULT hr)
{
char buf[256] ;
sprintf(buf, "%s: \t%s", szLabel, szText) ;
output(buf) ;
if (FAILED(hr))
{
ErrorMessage(hr) ;
}
}
//
// Print out the COM/OLE error string for an HRESULT.
//
void ErrorMessage(HRESULT hr)
{
void* pMsgBuf ;
::FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
hr,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR)&pMsgBuf,
0,
NULL
) ;
char buf[256] ;
sprintf(buf, "Error (%x): %s", hr, (char*)pMsgBuf) ;
output(buf) ;
// Free the buffer.
LocalFree(pMsgBuf) ;
}
} ; // End Namespace Util
//
// Overloaded ostream insertion operator
// Converts from wchar_t to char
//
ostream& operator<< ( ostream& os, const wchar_t* wsz )
{
// Length of incoming string
int iLength = wcslen(wsz)+1 ;
// Allocate buffer for converted string.
char* psz = new char[iLength] ;
// Convert from wchar_t to char.
wcstombs(psz, wsz, iLength) ;
// Send it out.
os << psz ;
// cleanup
delete [] psz ;
return os ;
}
|