相关疑难解决方法(0)

如何在Win32应用程序中打印到调试输出窗口?

我有一个win32项目,我已经加载到Visual Studio 2005中.我希望能够将内容打印到Visual Studio输出窗口,但我不能为我的生活找出方法.我试过'printf'和'cout <<',但是我的信息一直没有打印.

是否有某种特殊的方式来打印到Visual Studio输出窗口?

c++ console winapi visual-studio-2005 visual-studio

86
推荐指数
6
解决办法
19万
查看次数

将cout重定向到Windows中的控制台

我有一个相对较旧的应用程序.通过一些小的改动,它几乎完全用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)

c++ winapi

38
推荐指数
3
解决办法
4万
查看次数

MinGW,用控制台构建GUI应用程序

我正在使用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'的任何方法?

windows debugging console linker mingw

5
推荐指数
2
解决办法
1万
查看次数