李国帅 编2006-9-12 11:29
头文件
// File Name : DbgMsg.h #ifndef __DBGMSG_H__ #define __DBGMSG_H__ //向哪个窗口打印信息 #ifdef DBGMSG_ASST_WINDOW //assistant window #define DbgPrintf DbgAsstwndPrintf #endif #ifdef DBGMSG_MSGBOX_WINDOW //message box window #define DbgPrintf DbgMsgboxPrintf #endif #ifdef DBGMSG_FILE_OUTPUT //Output debug message to a file. #define DbgPrintf DbgFilePrintf #endif #ifdef DBGMSG_MSVC_WINDOW //MS-VC output window #define DbgPrintf DbgMsVcPrintf #endif #ifndef DbgPrintf #define DbgPrintf DbgMsVcPrintf #endif #define DoReturnVal(condition, return_val) \ if (condition)\ { \ V();\ return return_val; \ } #define DoReturn(condition) \ if (condition)\ { \ V();\ return; \ } #define IsEmpty(p) (p == NULL) #define IsNull(p) (p == NULL) #define IsFalse(p) (p == FALSE) #define IsTrue(p) (p == TRUE) #ifdef __cplusplus extern "C" { #endif //__cplusplus void DbgMsVcPrintf (char *fmt, ... ); void DbgMsgboxPrintf (char *fmt, ... ); void DbgAsstwndPrintf (char *fmt, ... ); void DbgFilePrintf (char *fmt, ... ); void DbgPopLastError(void); void DbgWriteStrFile(LPSTR lpszData); #ifdef __cplusplus } #endif //__cplusplus #endif //__DBGMSG_H__
函数
// File Name : DbgMsg.CPP #include "stdafx.h" #include "DbgPrint.h" #define DBG_STR_MAX_LEN 256 #define OUTPUT_FILE_NAME "d:\\vc app\\bin\\OUTPUT.LOG" HWND g_hwndDbgEdit = NULL; void DbgMsVcPrintf (char *fmt, ... ) { va_list argptr; /* Argument list pointer */ char str[DBG_STR_MAX_LEN]; /* Buffer to build sting into */ va_start (argptr, fmt); /* Initialize va_ functions */ wvsprintf (str, fmt, argptr); /* prints string to buffer */ va_end (argptr); /* Close va_ functions */ OutputDebugString(str); OutputDebugString(TEXT("\r\n")); } void DbgMsgboxPrintf (char *fmt, ... ) { va_list argptr; /* Argument list pointer */ char str[DBG_STR_MAX_LEN]; /* Buffer to build sting into */ va_start (argptr, fmt); /* Initialize va_ functions */ wvsprintf (str, fmt, argptr); /* prints string to buffer */ va_end (argptr); /* Close va_ functions */ MessageBox (NULL, str, "Debug Message(DbgMsgboxPrintf)", MB_ICONINFORMATION | MB_OK); } void DbgFilePrintf (char *fmt, ... ) { FILE *output; va_list argptr; /* Argument list pointer */ char str[DBG_STR_MAX_LEN]; /* Buffer to build sting into */ va_start (argptr, fmt); /* Initialize va_ functions */ wvsprintf (str, fmt, argptr); /* prints string to buffer */ va_end (argptr); /* Close va_ functions */ output = fopen(OUTPUT_FILE_NAME, "a"); if( output==NULL ) return; fprintf(output, "%s", str); fclose(output); } void DbgAsstwndPrintf (char *fmt, ... ) { va_list argptr; /* Argument list pointer */ char str[DBG_STR_MAX_LEN]; /* Buffer to build sting into */ va_start (argptr, fmt); /* Initialize va_ functions */ wvsprintf (str, fmt, argptr); /* prints string to buffer */ va_end (argptr); /* Close va_ functions */ if (g_hwndDbgEdit != NULL) { SetWindowText(g_hwndDbgEdit, str); } } void DbgPopLastError(void) { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL ); //DbgPrintf (lpMsgBuf); MessageBox (NULL, (LPCSTR)lpMsgBuf, "Debug Message(DbgPopLastError)", MB_ICONINFORMATION | MB_OK); LocalFree( lpMsgBuf ); } void DbgWriteStrFile(LPSTR lpszData) { FILE *output; output = fopen(OUTPUT_FILE_NAME, "a"); if( output == NULL ) return; while (*lpszData) { fwrite (lpszData++, sizeof(char), 1, output); } fclose(output); }