如何将退出代码从Ada进程返回到调用Windows进程?

时间:2016-03-01 14:57:29

标签: c++ windows ada gnat

我需要将Windows C ++程序与传统的GNAT Ada程序连接起来。 Windows程序将遗留的Ada程序作为一个单独的进程生成,然后等待它返回。

我可以将Ada主程序编写为返回整数的函数。我可以看到在Window中,我可以通过调用@AfterViews等待完成该过程并且我可以调用WaitForSingleObject() - 但这些似乎都没有告诉我Ada程序返回的内容 - 我我纠正了吗?

返回值似乎是调用本身是否返回错误,而不是被调用的进程。

我应该查看流程信息句柄还是其他一些?

有人能说明如何将Ada程序的返回值恢复到调用的Windows程序吗?

3 个答案:

答案 0 :(得分:2)

我认为您无法访问旧版应用程序的来源,或者您不希望进行任何更改。

如果旧应用程序正在将结果写入标准输出(STDOUT),则可以将Ada程序的STDOUTSTDERR重定向到管道。

稍后您可以从管道中提取信息并在C ++程序中解析它。

您可以在此处找到有关如何将STDOUT重定向到Windows中的管道的示例:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682499%28v=vs.85%29.aspx

另一种方法是将输出重定向到临时文件,并在检测到进程完成后解析文件。

答案 1 :(得分:1)

Ada程序通常设置退出代码,就像使用任何其他语言编写的程序一样,尽管标准库仅提供SuccessFailure(映射到适当的操作系统特定值)。 / p>

您是否检查过您出于某种原因呼叫的应用程序的开发人员是否决定使用相同的退出代码,无论执行结果如何? (阅读文档可能有用。; - )

答案 2 :(得分:0)

Microsoft文档不明确。这就是我需要帮助的地方。

需要修改Ada程序,将主程序更改为返回int的main函数。因此,当它在另一个进程中生成然后完成时,我需要一种方法让该返回值返回到父进程。事实上,传递给GetExitCodeProcess()的地址的DWORD变量实际上获得了Ada程序的返回值。从MS文档中读取返回值是否来自Ada程序或某些与该过程有关的Windows错误代码并不清楚......

无论如何,谢谢你的帮助。