2013-06-20 132 views
1

我修改了一個OpenCascade的MFC示例,添加了一些功能(這是HLR示例)。應用程序使用文檔/視圖體系結構,並使用文檔類來完成大部分工作。如何從命令行獲取MFC應用程序以阻止?

某些新功能不需要GUI,所以程序在GUI打開之前退出,我通過從CDocument專業化中調用exit(0)來執行程序。

我的問題是,對於我們的工作流程,將從Windows命令行調用MFC應用程序。只要它被調用,它就會將控制返回到shell,並在後臺快樂地繼續,無論它是否打開一個GUI。我需要的應用程序是從命令行中阻止GUI是否打開。

我一直在讀CWinApp和CMDIFrameWnd,但是如果你能從命令行創建應用程序塊,我不知道該怎麼做。

+1

我會用/ SUBSYSTEM:CONSOLE連接器設置使它成爲控制檯應用程序。 – drescherjm

+0

我認爲這也會隱含地改變main()的入口點,所以你需要'/ entry:WinMain'或類似的東西,另外在鏈接器設置中。 –

+1

我在這裏有幾個選擇這個問題:http://stackoverflow.com/questions/13840942/visual-studio-2012-c-standard-output/13841522#13841522 – drescherjm

回答

0

你不能。 EXE標記爲控制檯或Windows程序,如果它是Windows程序控制權交給Windows管理器,控制檯將繼續運行。

最好的辦法是創建一個小型控制檯應用程序,調用CreateProcess啓動Windows應用程序,然後在hProcess手柄上簡單地WaitForSingleObject完成。爲什麼這是不可能的

更多技術信息可以在舊的新博客在這裏:

http://blogs.msdn.com/b/oldnewthing/archive/2009/01/01/9259142.aspx

0

如果您將可執行文件與鏈接器選項/子系統中的控制檯應用程序:CONSOLE命令行將阻塞,直到應用程序退出。請記住,控制檯應用程序可以有一個Windows GUI。

設置鏈接器設置/ SUBSYSTEM:如果你將它作爲鏈接器設置,你必須將入口點調整爲main()而不是winmain,否則確實存在一個問題。在下面的線程中有幾個解決方法(感謝Ulrich Eckhardt提到的入口點): Visual Studio 2012 C++ Standard Output

這種方法還有第二個缺點。如果程序未從控制檯窗口運行,應用程序將爲您創建控制檯窗口。這可能會讓用戶感到困惑。

+0

感謝您提供有關作爲控制檯應用程序編譯/運行的所有建議。我並不擔心混淆用戶,但我擔心打印出來的大量printf調試語句會降低應用程序的運行速度。你們都知道這是否會成爲問題? – HeywoodFloyd

+0

你不能在你的發佈版本中禁用它們或將它們重定向到一個文件嗎? – drescherjm

+0

除此之外,snowdude的答案應該可以工作。 – drescherjm

相關問題