如何在 QT Creator 中查看 ShellExecute 命令返回(HINSTANCE ) 代码

How to check ShellExecute command return(HINSTANCE ) code in QT Creator

本文关键字:返回 命令 HINSTANCE 代码 ShellExecute QT Creator      更新时间:2023-10-16

我正在使用 Shell 命令来启动一个进程。我的开发环境是C++/QT Creator/QT Libraries and Windows API。

如何处理 HINSTANCE 返回值? if (hInstance <32) 代码引发编译错误

    437: error: ISO C++ forbids comparison between pointer and integer

    HINSTANCE hInstance = ShellExecute(0, QString("open").toStdWString().c_str(), Path.toStdWString().c_str(), 0, 0, SW_SHOWNORMAL);
   if (hInstance < 32)
      qDebug() << "Error";

如果有人仍在为此苦苦挣扎,这里有一个避免警告的解决方案:

int retValue = static_cast<int>(reinterpret_cast<uintptr_t>(ShellExecute(<etc>)));

请参阅何时uintptr_t比intptr_t更受欢迎?以获取有关uintptr_t的更多评论

您可以使用reinterpret_cast来强制转换返回值:

int retValue  = reinterpret_cast<int>(ShellExecute(0, QString("open").toStdWString().c_str(), Path.toStdWString().c_str(), 0, 0, SW_SHOWNORMAL));
   if (retValue  < 32)
      qDebug() << "Error";

虽然它也可能导致警告:

警告 C4302:"reinterpret_cast":从"HINSTANCE"截断为"int"

但至少它有效。在 MSDN 中,它还建议转换为 int。

https://msdn.microsoft.com/en-us/library/windows/desktop/bb762153(v=vs.85).aspx

如果函数成功,它将返回一个大于 32 的值。如果函数失败,它将返回一个错误值,指示失败的原因。返回值转换为 HINSTANCE,以便向后兼容 16 位 Windows 应用程序。然而,它不是一个真正的HINSTANCE。它只能转换为 int,并与下面的 32 或以下错误代码进行比较。