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

标签 c++ winapi visual-c++ winmain

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

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/

相关文章:

c++ - Visual C++ 窗体、简单消息框和将文本从文本字段分配给字符串时出错

c++ - 比较两个 CGPDFDictionary

qt - 在 Qt 应用程序中使用 WinAPI 提取图标

windows - WriteFile 函数的 lpNumberOfBytesWritten 参数

c - TreeView fontsize - 自定义绘制或所有者绘制

c++ - 基于范围的 For 循环和 ADL

c++ - 可重复的目标代码生成 C++

c++ - 从 int 到 int** C++ 的无效转换

c++ - 在 C++ 中,如何找到直接或间接链接到数组特定元素的数组的所有元素?

c++ - 如何在 Linux 上强制执行 vector 下标超出范围调试断言