C ++单独的命令行窗口?

时间:2011-04-27 00:41:51

标签: c++ console window

所以我有一个GUI程序,由于某种原因它不允许我使用printf()进行调试。 当我使用printf()时,由于某种原因它不会转到Visual Studio调试器。

无论如何,我想创建一个在GUI打开时打开的单独窗口, 并且基本上能够将信息提供给该控制台并与之通信。

例如:

void talk(std::string info){
//Add the value of info to the next line in the console
}

任何人都知道如何做到这一点? 基本上创建一个命令行并与之交谈以便我可以看到输出:

CommandLine c;
c.talk("hey!");

2 个答案:

答案 0 :(得分:4)

您可以使用AllocConsole创建一个控制台来创建一个控制台,然后显式写入该控制台(有一些方法,GetStdHandle并且文件写入将起作用)。您也可以使用OutputDebugString写入VS输出窗口。

void makeConsole()
{
    AllocConsole();
    console = GetStdHandle(STD_OUTPUT_HANDLE);
}

void talk(std::string info)
{
    WriteFile(console, info.c_str(), info.length());  // To console
    OutputDebugString(info.c_str()); // To output window
}

(伪代码,函数可能不太正确)

修改 如果您只通过talk功能写入控制台,这将正常工作。如果你在整个代码中使用printf / cout,你肯定想要使用Ben的方法(更容易重复使用)。

答案 1 :(得分:3)

@peachykeen有一半的解决方案。如果您想让printfcout有效,请尝试以下操作:

AllocConsole();
freopen("CONOUT$", "w", stdout);