gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:53 31 4
gpt4 key购买 nike

为什么这个程序可以正确显示消息框,但没有设置错误级别?

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

最佳答案

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

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

start /wait a.exe
echo %ERRORLEVEL%

关于c++ - 为什么 winmain 不设置错误级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/592075/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com