gpt4 book ai didi

c++ - 在 Visual Studio 中捕获控制台应用程序的输出

转载 作者:行者123 更新时间:2023-11-28 08:23:57 25 4
gpt4 key购买 nike

我有一个简单的控制台应用程序,它为我提供了 Visual Studio 2010 中的一些预构建功能。它继续生成其他子进程(尽管等待这些子进程的终止。

当我在 visual studio 之外运行应用程序时,它的所有消息等都会出现在控制台窗口(即 stdout)中。但是,当我在 VS 下运行此应用程序时,我在构建窗口中看不到任何输出。

有人知道这是为什么吗?

这很烦人。

编辑:经过进一步检查,我设法让我的应用程序的标准输出出现,但子进程的标准输出没有出现。有什么想法吗?

我使用以下代码重定向子进程的标准输出:

STARTUPINFO si;
GetStartupInfo( &si );

si.dwFlags = STARTF_USESTDHANDLES;
si.hStdError = GetStdHandle( STD_ERROR_HANDLE );
si.hStdInput = GetStdHandle( STD_INPUT_HANDLE );
si.hStdOutput = GetStdHandle( STD_OUTPUT_HANDLE );

PROCESS_INFORMATION pi;

// Create the process.
if ( !CreateProcess( applicationName.GetCStr(), cmd.CStr(), NULL, NULL, TRUE, 0, NULL, workingDir.GetCStr(), &si, &pi ) )
{
// Failed to create process!!
return false;
}

最佳答案

我相信您需要为子进程创建明确的句柄以将它们连接起来。 MSDN 上有一篇(或几篇)文章,请参阅 http://msdn.microsoft.com/en-us/library/ms682499%28v=vs.85%29.aspx例如。

子进程继承打开的对象句柄,但有自己的标准输入/标准输出等。句柄,除非你通过适当的步骤明确地为它创建它们。无论如何,这是我的理解;阅读文章了解更多信息。

关于c++ - 在 Visual Studio 中捕获控制台应用程序的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4748456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com