diddom 发表于 2012-5-13 23:24:14

win32 TRACE

本帖最后由 diddom 于 2012-5-13 23:28 编辑

假如想写纯win32又想用TRACE这功能,如下


ifdef _DEBUG
#define TRACEMAXSTRING1024

char szBuffer;

//inline void TRACE(const char* format,...)
void TRACE(const char* format,...)
{         
        va_list args;         
        va_start(args,format);         
        int nBuf;         
        nBuf = _vsnprintf(szBuffer,
                TRACEMAXSTRING,
                format,
                args);
                va_end(args);
                _RPT0(_CRT_WARN,szBuffer);
}

#define TRACEF _snprintf(szBuffer,TRACEMAXSTRING,"%s(%d): ", \
                     &strrchr(__FILE__,'\\'),__LINE__); \
                                  _RPT0(_CRT_WARN,szBuffer); \
                                                                        TRACE

#else
// Remove for release mode
#define TRACE((void)0)
#define TRACEF ((void)0)

#endif


void printError(TCHAR* msg)
{
DWORD eNum;
TCHAR sysMsg;
TCHAR* p;

eNum = GetLastError( );
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
         NULL, eNum,
         MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
         sysMsg, 256, NULL );

// Trim the end of the line and terminate it with a null
p = sysMsg;
while( ( *p > 31 ) || ( *p == 9 ) )
    ++p;
do { *p-- = 0; } while( ( p >= sysMsg ) &&
                        ( ( *p == '.' ) || ( *p < 33 ) ) );

// Display the message
_tprintf( TEXT("\nWARNING: %s failed with error %d (%s)"), msg, eNum, sysMsg );
}

页: [1]
查看完整版本: win32 TRACE