2016-03-01 27 views
1

我需要将Windows C++程序连接到传统的GNAT Ada程序。 Windows程序将遗留的Ada程序作为一个独立的进程产生,然后等待它返回。如何将退出代码从Ada进程返回到调用Windows进程?

我可以将Ada主程序写成一个返回整数的函数。我可以看到,在Window中,我可以等待过程完成,然后调用WaitForSingleObject(),我可以调用GetExitCodeProcess() - 但这两个人似乎都没有告诉我Ada程序返回了什么 - 我正确吗?

返回值似乎是调用自己是否返回了错误,而不是被调用的进程。

我应该看看进程信息处理或一些这样的?

任何人都可以告诉我如何获得一个Ada程序的返回值调用Windows程序?

+1

你传递'DWORD'变量的地址'GetExitCodeProcess',并在成功返回,该变量被设置为进程的退出代码。这不适合你吗? –

+0

如果是C代码,你会怎么做? – darkestkhan

回答

2

我假设您无权访问遗留应用程序的来源,或者您不希望进行任何更改。

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

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

你可以在这里找到关于如何在Windows STDOUT重定向到一个管道的例子:

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

另一种方式是将输出重定向到一个临时和解析该文件一旦检测到过程已完成。

1

阿达程序通常设置退出代码就像用任何其它语言程序,虽然标准库只提供SuccessFailure(映射到相应的,特定于操作系统的值)。

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

0

Microsoft文档不清楚。这是我需要帮助的。

需要修改Ada程序以将主程序更改为返回int的主函数。所以,当它在另一个进程中衍生出来并完成时,我需要一种方法让返回值回到父进程。实际上,将其地址传递给GetExitCodeProcess()的DWORD变量事实上获得了Ada程序的返回值。它不是从阅读MS文档返回值是否将是从阿达程序或与过程做一些Windows错误代码清晰...

无论如何,感谢您的帮助。

相关问题