4

我有一个可以工作的 C++ MFC 程序,但我也希望能够通过命令行调用一个更简单的版本。(如果有 cmd 行参数,这通过使用 cmd 行版本来工作。)我希望程序使用当前打开的“cmd”窗口运行,并在某种程度上为它创建一个新的 shell。在 InitInstance() 中,我有...

CString cmdLine;
cmdLine.Format("%s", this->m_lpCmdLine);
if(cmdLine.IsEmpty())
    dlg.DoModal(); // Run application normally
else
{
    CString header = "Welcome to the program!";
    AttachConsole(ATTACH_PARENT_PROCESS);     // Use current console window
    LPDWORD charsWritten = 0;
    WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), header, header.GetLength(), NULL, NULL);
}

如何将输入输入到我的程序中?cin 似乎不起作用。我试过这样的事情:

char input[10] = "";
while((strcmp(input, "q") != 0) && (strcmp(input, "quit") != 0))
    scanf("%s", input);

但它似乎不起作用,因为命令窗口等待新的提示。

4

1 回答 1

4

根本问题是您的 MFC 程序在其 EXE 标头中未标记为控制台模式程序。所以命令处理器没有理由等待它完成,就像它通常对控制台模式程序所做的那样。您现在有两个程序试图从控制台读取,您和 cmd.exe。你输了。

有几种解决方法,都没有吸引力:

  • 开始你的程序start /wait yourapp.exe arg1 arg2...
  • 将 Linker + System + SubSystem 设置更改为 Console。当您发现您没有任何参数时,请致电 FreeConsole。flash 有点恶心,Java 程序员都知道
  • 当你发现你确实有参数时调用 AllocConsole()。您将获得自己的控制台。
于 2012-10-17T22:02:41.133 回答