找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 5165|回复: 0

[函数] win32 TRACE

[复制链接]

96

主题

158

回帖

4

精华

核心会员

积分
6513
发表于 2012-5-13 23:24:14 | 显示全部楼层 |阅读模式
本帖最后由 diddom 于 2012-5-13 23:28 编辑

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


ifdef _DEBUG
#define TRACEMAXSTRING  1024  

char szBuffer[TRACEMAXSTRING];

//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__,'\\')[1],__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[256];
  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("\n  WARNING: %s failed with error %d (%s)"), msg, eNum, sysMsg );
}

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表