我有一个win32项目,我已经加载到Visual Studio 2005中.我希望能够将内容打印到Visual Studio输出窗口,但我不能为我的生活找出方法.我试过'printf'和'cout <<',但是我的信息一直没有打印.
是否有某种特殊的方式来打印到Visual Studio输出窗口?
我有一个相对较旧的应用程序.通过一些小的改动,它几乎完全用Visual C++ 2008构建.我注意到的一件事是我的"调试控制台"工作不正常.基本上在过去,我AllocConsole()用来为我的调试输出创建一个控制台.然后我会用它freopen来重定向stdout到它.这与C和C++风格的IO完美配合.
现在,它似乎只适用于C风格的IO.将内容重定向cout到分配的控制台的正确方法是什么AllocConsole()?
这是以前的代码:
if(AllocConsole()) {
freopen("CONOUT$", "wt", stdout);
SetConsoleTitle("Debug Console");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
}
Run Code Online (Sandbox Code Playgroud)
编辑:我发生的一件事是我可以创建一个自定义streambuf,其溢出方法使用C样式IO写入并std::cout用它替换默认的流缓冲区.但这似乎是一个警察.有没有正确的方法在2008年这样做?或者这可能是MS忽略的东西?
编辑2:好的,所以我已经实现了上面拼写的想法.基本上它看起来像这样:
class outbuf : public std::streambuf {
public:
outbuf() {
setp(0, 0);
}
virtual int_type overflow(int_type c = traits_type::eof()) {
return fputc(c, stdout) == EOF ? traits_type::eof() : c;
}
};
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {
// create the console …Run Code Online (Sandbox Code Playgroud) 我正在使用MinGW在Windows上构建我的应用程序.编译和链接时,选项"-mwindows"放在命令行中以具有Win32 API函数.
更具体一点:当没有"-mwindows"这样调用MinGW的GCC时:
c:\>g++ -c main.cpp
c:\>g++ -o main.exe main.o
Run Code Online (Sandbox Code Playgroud)
上面2个命令行之后的'main.exe'将使用控制台运行,并且Win32 API函数将无法使用.
用这样的"-mwindows"调用MinGW的GCC时:
c:\>g++ -c main.cpp
c:\>g++ -o main.exe main.o -mwindows
Run Code Online (Sandbox Code Playgroud)
现在链接'-mwindows','main.exe'可以使用Win32 API,但是,它不会在应用程序运行时启动控制台.
这个"-mwindows"选项禁用控制台,这使我无法打印出调试信息.保持控制台和选项'-mwindows'的任何方法?