2016-03-01 45 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錯誤代碼清晰...

無論如何,感謝您的幫助。

相關問題