VC++非MFC项目中如何使用TRACE宏

记得原来尝试学MFC的时候觉得有一个TRACE可以在Debug时向VS的调试输出窗口输出字串符,用来调试时跟踪变量很方便。

然则如果不是MFC项目或者ATL的项目的话是不能使用这个宏的。这时有一个没有什么额外消耗的办法能够做到向调试输出窗口输出。

在项目中额外包含windows.h这个头文件,再使用OutputDebugString()这个函数就能够起到与TRACE()宏相同的效果。在进行一点包装就能和c中的printf一样接受不定项参数。

下面程序做为范例。

 

#include <iostream>

#include <windows.h>

using namespace std;

bool _trace(TCHAR *format, ...)

{

TCHAR buffer[1000];

va_list argptr;

va_start(argptr, format);

wvsprintf(buffer, format, argptr);

va_end(argptr);

OutputDebugString(buffer);

return true;

}

int main() {

int test = 5;

_trace("hi output:%d", test);

int a;

cin >> a;

}

在vs2005中编译运行后在Output窗口输出"hi output : 5"

这么nb的做法当然不是我自己发现的...在StackOverflow这里发帖问到的,那边还有一个方便使用的将trace包装的头文件和cpp文件。

话说这个StackOverflow是个蛮新颖的程序员社区,这边提问被解答的效率和质量都相当高

站点也做的很不错,web2.0风味十足,还有badges这种先进的要素

-------------------------------------

另外记得要将项目属性中General->Character Set设置为Not Set 或者Multi Byte才行,用Unicode的话无法通过编译。

再附个包trace.rar有相应cpp/h

时间: 2024-10-26 11:26:58

VC++非MFC项目中如何使用TRACE宏的相关文章

在非MFC程序中引用CString

CString在当今软件设计界里还是小有名气的,说它是MFC中使用的最多的类一点也不过,然而在使用sdk编windows程序的时候,确不能利用CString类,只能用sdk的运行时库,比如strlen,strcpy,strstr等等,本文讨论的是在非mfc程序中使用CString类的方法,算是个引子,如果有更好的实现方法,欢迎大家讨论. 为了使用CString类,首先源文件必须是以cpp结尾的,这是因为vc默认对不同的扩展名采用不同的编译方法和错误检查,mfc的支持文件Afx.h只有由cpp为扩

h-怎样对一个程序实现的功能移植到已有的一个大MFC项目中?

问题描述 怎样对一个程序实现的功能移植到已有的一个大MFC项目中? 1// HttpPost.cpp written by l_zhaohui@163.com 2// 2007/11/30 3#include "stdafx.h" 4#include <windows.h> 5#include <stdio.h> 6#include <stdlib.h> 7 8#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS 9#

非MFC工程中使用MFC库

目录(?)[-] 需求说明 常见问题 问题分析 参考解决方法 我的解决方案 Stdafxh的原理     需求说明 C++工程的类型有很多,从VS(或VC)可以看到常见的有:Win32 Console Application.MFC Application.Win32 Project等.在创建MFC工程时,通过IDE的向导会自动帮我们创建相应的类文件和包含必需的头文件,但有时候我们需要在非MFC工程中包含MFC的库.至于为什么会有这个需要,为何不在一开始就创建MFC工程呢?可能有两种原因:1.在

在非MFC工程中,如何使用MFC的CString类?

问题描述 在非MFC工程中,如何使用MFC的CString类? 解决方案 解决方案二:摘的:转非MFC工程使用CString2011-05-1316:10187人阅读评论(0)收藏举报在VS2008下如果建非MFC工程而又使用CString会出现如下错误:1.errorC2065:"CString":未声明的标识符解决方法:将#include<afx.h>添加在程序开始处,或将其放在stdafx.h预编译头中.2.再编译提示:fatalerrorC1189:#error:B

log4j日志问题-在非WEB项目中配置了log4j日志的配置文件,日志应该打在哪个目录下的文件

问题描述 在非WEB项目中配置了log4j日志的配置文件,日志应该打在哪个目录下的文件 我发现只有在控制台可以看到日志,日志不会到印到文件里面,求帮忙解决一下 我以为是打印到log/test.log文件里面的,但是没有,自己创建了文件,也不会写进去 log4j.propertis文件内容如下: log_home=../log log4j.rootLogger=debug,Console log4j.appender.Console=org.apache.log4j.ConsoleAppender

VC 项目中可以使用的路径宏

原文地址:http://blog.csdn.net/collin1211/article/details/2483316 VC 项目中可以使用的路径宏: 宏 说明 $(RemoteMachine) 设置为"调试"属性页上"远程计算机"属性的值.有关更多信息,请参见更改用于 C/C++ 调试配置的项目设置. $(References) 以分号分隔的引用列表被添加到项目中. $(ConfigurationName) 当前项目配置的名称(例如"Debug&quo

vc++-关于VC++非MFC的编辑框问题

问题描述 关于VC++非MFC的编辑框问题 我用API创建了一个窗口后,按enter弹出了非模式对话框后.光标定在对话框里的编辑框里.这时我移动不了窗口,是怎么回事.然后我想再按enter结束对话框.问此时收到的消息是属于对话框还是窗口或是编辑框里.用什么函数判断在对话框键入的字.

在非MFC程序中使用调试宏 ASSERT(),VERIFY()和 TRACE()

游戏制作已经开始采用C++了,却鲜有人选择使用MFC.但笔者觉得的 ASSERT(),VERIFY()和 TRACE()这几个宏很好用.所以就想自己写一个版本来适应Windows平台下不同的工程类型. 提醒: ASSERT()被测试它的参数,若参数为0,则中断执行并打印一段说明消息.在 Release 版本的程序中它不起任何作用. VERIFY()和 ASSERT()很相似,区别在于在 Release 版本中它仍然有效(译者注:原作者在这里没有讲清楚,VERIFY()不会打印说明,只是会对参数表

vc++,mfc,加入别的项目中的类应该注意什么问题?

问题描述 vc++,mfc,加入别的项目中的类应该注意什么问题? 我在自学用visual C++编windows程序,用的是曹昊的<visual C++ windows编程技术>.其中例9-2,我照书中的要求在项目DocSerializeFirst中添加了另一个项目CMFCResourceALL的CMFCResourceALLDoc和CMFCResourceALLView类,并且在DocSerializeFirst.cpp中添加了(#include)CMFCResourceALLDoc和CMF