当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么winmain不设置错误级别?》经验,为你挑选了1个好方法。

为什么此程序正确显示消息框,但未设置错误级别?

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的可执行文件.我在命令提示符下执行了此操作:

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作为错误级别/状态代码提供.



1> jdigital..:

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

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

start /wait a.exe
echo %ERRORLEVEL%

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有