Jiang's C++ Space

创作,也是一种学习的过程。

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::

我们都知道MFC有个很有用的宏,叫TRACE,它用起来跟printf一样简单,能直接在VC++的output窗口中输出调试信息,但非MFC的project却没有这个宏,只能用OutputDebugString这个API输出,而OutputDebugString这个API却不支持类似printf这样的输出格式,而且不能在Release版本中自动关闭,于是我自己写了一个,其实实现起来还是蛮简单的,上代码:

#ifdef _DEBUG
#define MYTRACE  DbgStrOut
#else
#define MYTRACE
#endif

// My debug output function
void DbgStrOut(const TCHAR *fmt, );
把这个定义写在预编译头中(默认是stdafx.h),就能很方便在别处调用了。这个MYTRACE的作用就相当于TRACE。下面是写在cpp文件中的代码。
void DbgStrOut(const TCHAR *fmt, )
{
    TCHAR szOutStr[
512];

    va_list ap;
    va_start(ap, fmt);
    vswprintf(szOutStr, fmt, ap);
    va_end(ap);

    OutputDebugString(szOutStr);
}
这样就可以了,我尝试了Windows Mobile的项目,也是可以通过的,而且支持TCHAR字符串,也就是说可以用Unicode。:)
posted on 2010-06-09 11:19 Jiang Guogang 阅读(1276) 评论(4)  编辑 收藏 引用 所属分类: Windows Programming

评论

# re: 非MFC程序使用TRACE 2010-06-09 11:34 matthew
额,宏....
你有没有打算做win mobile的程序?
我还打算玩玩adroid  回复  更多评论
  

# re: 非MFC程序使用TRACE 2010-06-09 16:03 博主
@matthew
你可以玩玩,那玩意儿主要是用java开发的。  回复  更多评论
  

# re: 非MFC程序使用TRACE 2010-08-10 13:36 Jiang Guogang
补充,这是“安全版”的:
#define OUTPUT_BUFF_LEN 512
void DbgStrOut(const TCHAR *fmt, ...)
{
TCHAR szOutStr[OUTPUT_BUFF_LEN];

va_list ap;
va_start(ap, fmt);
StringCbVPrintf(szOutStr, OUTPUT_BUFF_LEN, fmt, ap);
va_end(ap);

OutputDebugString(szOutStr);
}  回复  更多评论
  

# re: 非MFC程序使用TRACE 2011-06-27 14:49 Jiang Guogang
后来发觉SDK提供了一个宏:RETAILMSG
也有类似的功能。  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理