c – 为什么winmain不设置错误级别?

前端之家收集整理的这篇文章主要介绍了c – 为什么winmain不设置错误级别?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么此程序正确显示消息框,但未设置错误级别? @H_502_2@int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow) { MessageBox(NULL,_T("This should return 90 no?"),_T("OK"),MB_OK); return 90; }

我将上面的代码编译成名为a.exe的可执行文件.我在命令提示符下执行了此操作:

@H_502_2@c:\> a.exe (message Box is displayed,I press ok) c:\> echo %ERRORLEVEL% 0

如果我使用exit(90),我会得到相同的结果;就在返回之前.它仍然说0.

我也尝试通过CreateProcess启动程序并使用GetExitCodeProcess获取结果,但它也向我返回0.我做了错误检查以确保它全部正确启动.

我最初在一个更复杂的程序中看到了这个问题所以我做了这个简单的程序来验证问题.结果是相同的,两个具有WinMain的程序始终返回0.

我尝试了x64,x86和unicode以及MBCS编译选项.所有都将0作为错误级别/状态代码.

解决方法

如果您的程序是Windows应用程序而不是控制台应用程序,则命令解释程序不会等待它完成(在您按OK之前,请查看命令窗口,您将看到它已准备好进行下一个命令).

如果是这种情况,将应用程序构建为控制台子系统应用程序将解决问题.如果您需要作为Windows应用程序运行,您可能会尝试等待命令完成,看看是否有效(我没有尝试过,但这似乎是一个很好的方法):

@H_502_2@start /wait a.exe echo %ERRORLEVEL%

猜你在找的C&C++相关文章