如何在 QT Creator 中查看 ShellExecute 命令返回(HINSTANCE ) 代码
How to check ShellExecute command return(HINSTANCE ) code in QT Creator
我正在使用 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 或以下错误代码进行比较。
相关文章:
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 如何通过另一个对象中的命令正确地从一个对象返回数据
- 在 c++ 中从执行的 shell 命令获取返回状态的安全方法是什么?
- 如何在C++中执行命令并获取命令的返回代码标准输出和标准
- 当命令失败时,gzip 会在 C++ 中返回错误代码吗?
- 从 C++ 调用 cURL 命令会返回意外的错误代码,如 1792 和 6656
- C++所有 AT 命令的短信返回错误 |PC<->通过蓝牙和winsocket的移动连接
- 该命令在QProcess中启动,不会返回Linux上的响应
- 在我的场景中,什么可能导致解压缩命令返回 -1
- read() 从命令行返回 EISDIR 错误
- 为什么返回的 FILE* 在 popen() 中的命令失败时保留数据
- 如何将命令从c++应用程序返回到父终端
- C++:如何运行一个系统命令N次(异步)并返回N次执行时间
- 命令分析器的返回集
- 主对话框在命令消息处理程序返回之前销毁
- 如何在 QT Creator 中查看 ShellExecute 命令返回(HINSTANCE ) 代码
- 使用 system() 执行命令返回返回值的 256 倍 ( << 8).这有什么意义
- Libssh不返回命令结果
- 返回命令输入函数
- execvp(),无法直接返回命令行