【发布时间】:2010-10-10 04:13:10
【问题描述】:
为什么这个程序能正确显示消息框,却没有设置错误级别?
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 作为错误级别/状态代码。
【问题讨论】:
-
用 winegcc 测试,它在我的系统上返回 90(用 $ 测试?)。也许是一些外壳问题?
-
我认为这不是 shell 问题,因为我还从另一个应用程序启动了该进程并使用了 CreateProcess/WaitForSingleObject/GetExitCodeProcess
标签: c++ winapi visual-c++ winmain