Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有重定向标准输出流的GUI应用程序不';t将控制返回控制台 我有一个用C++编写的GUI Windows应用程序(MFC),它通过“代码> STDUD< 流连接到父控制台进行输出。它使用API和重定向iotoconsole方法_C++_Winapi_Console Application - Fatal编程技术网

带有重定向标准输出流的GUI应用程序不';t将控制返回控制台 我有一个用C++编写的GUI Windows应用程序(MFC),它通过“代码> STDUD< 流连接到父控制台进行输出。它使用API和重定向iotoconsole方法

带有重定向标准输出流的GUI应用程序不';t将控制返回控制台 我有一个用C++编写的GUI Windows应用程序(MFC),它通过“代码> STDUD< 流连接到父控制台进行输出。它使用API和重定向iotoconsole方法,c++,winapi,console-application,C++,Winapi,Console Application,因此,如果我从常规控制台应用程序调用以下行(该应用程序本机具有到stdout的输出): 我得到了我期望的结果: 但是,如果我从GUI应用程序(带有连接的父控制台)调用同一行代码,我会得到以下结果,除了控件似乎不会返回到父命令提示符窗口(请参见红色圆圈): 请注意,我可以在父命令提示符窗口中键入命令,因此它不会挂起,如果我按enter键,它将执行我作为命令键入的任何内容 那么,我没有从我的控制台应用程序调用什么来将控制权返回到父控制台呢?这与返回控制权无关 当您从命令提示符运行控制台应用程序时

因此,如果我从常规控制台应用程序调用以下行(该应用程序本机具有到stdout的输出):

我得到了我期望的结果:

但是,如果我从GUI应用程序(带有连接的父控制台)调用同一行代码,我会得到以下结果,除了控件似乎不会返回到父命令提示符窗口(请参见红色圆圈):

请注意,我可以在父命令提示符窗口中键入命令,因此它不会挂起,如果我按enter键,它将执行我作为命令键入的任何内容


那么,我没有从我的控制台应用程序调用什么来将控制权返回到父控制台呢?

这与返回控制权无关

当您从命令提示符运行控制台应用程序时,命令提示符将等待控制台应用程序完成,因此您将看到控制台应用程序的输出,然后是一个新的提示符,如第一张图片所示

当您从命令提示符运行GUI应用程序时,命令提示符不会等待GUI应用程序完成,因此您通常会看到一个新的提示符,后跟GUI应用程序的输出,如下所示:

C:\>TestGuiProjWithOutputToConsole

C:\>测试消息。

正如你所指出的,没有任何问题。您可以键入命令,但它们可以工作,只是提示出现在错误的位置

您的第二个示例没有显示第二个提示,可能是因为您有一个回车字符,所以提示被覆盖。尝试在测试消息之前输出一个换行符,您应该会看到提示(尽管仍然在错误的位置)

您可以通过运行以下命令告知控制台等待GUI应用程序:

start/wait TestGuiProjWithOutputToConsole


简而言之,GUI应用程序不能很好地使用命令提示符,因为它们同时运行并输出到同一个控制台,因此它们的输出混乱不堪。

这与返回控制无关

当您从命令提示符运行控制台应用程序时,命令提示符将等待控制台应用程序完成,因此您将看到控制台应用程序的输出,然后是一个新的提示符,如第一张图片所示

当您从命令提示符运行GUI应用程序时,命令提示符不会等待GUI应用程序完成,因此您通常会看到一个新的提示符,后跟GUI应用程序的输出,如下所示:

C:\>TestGuiProjWithOutputToConsole

C:\>测试消息。

正如你所指出的,没有任何问题。您可以键入命令,但它们可以工作,只是提示出现在错误的位置

您的第二个示例没有显示第二个提示,可能是因为您有一个回车字符,所以提示被覆盖。尝试在测试消息之前输出一个换行符,您应该会看到提示(尽管仍然在错误的位置)

您可以通过运行以下命令告知控制台等待GUI应用程序:

start/wait TestGuiProjWithOutputToConsole


简而言之,GUI应用程序不能很好地使用命令提示符,因为它们同时运行并输出到同一个控制台,因此它们的输出混乱。

当我使用
WScript.Shell
对象和
Exec
方法从ASP脚本运行程序时,就会出现这个问题。它似乎在我的GUI应用程序完成将数据输出到它的
stdout
流之后等待
Enter
。我不知道为什么会发生这种情况?
Exec
会将控制权返回给您的代码。大概您编写了一些代码来处理gui应用程序的输出,正是这些代码阻塞了,但我看不到任何代码。我首先要做的是检查GUI应用程序的输出行(尤其是最后一行)是否正确地终止于回车符和换行符。将输出重定向到一个文件(例如,
guiapp>output.txt
),对output.txt执行十六进制转储,并检查每一行是否以“\x0d\x0a”结尾。我认为它只执行
\x0a
,是否重要?通常您的代码只会显式地写入\x0a(即“\n”),但这将转换为“\x0d\x0a”通过输出流处于文本模式。要确定发生了什么,最简单的方法就是花几秒钟的时间查看一个十六进制转储。有些代码对行尾非常挑剔,有些则不然。因为我不知道你在用这些数据做什么,我不知道这是否重要。我认为这可能是一个问题,因为问题中的第二个图像暗示了格式不正确的行尾,您还说它正在等待输入。当我使用
WScript.Shell
对象和
Exec
方法从ASP脚本运行程序时,会出现问题。它似乎在我的GUI应用程序完成将数据输出到它的
stdout
流之后等待
Enter
。我不知道为什么会发生这种情况?
Exec
会将控制权返回给您的代码。大概您编写了一些代码来处理gui应用程序的输出,正是这些代码阻塞了,但我看不到任何代码。我首先要做的是检查GUI应用程序的输出行(尤其是最后一行)是否正确地终止于回车符和换行符。将输出重定向到一个文件(例如,
guiapp>output.txt
),对output.txt执行十六进制转储,并检查每行是否以“\x0d\x0a”结尾。我认为它只执行
\x0a
,是否重要?通常您的代码
_tprintf(_T("Test message.\n"));