2013-06-20 54 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

相关问题