我有一些代码定义如下:
typedef long (*ShellExecFunct)(long, const char*, const char*, long, long, long); 无效的一些功能() { QLibrary shell32(QString("shell32.dll")); ShellExecFunct viewfile = (ShellExecFunct) shell32.resolve("ShellExecuteA"); 如果(视图文件) { int res = viewfile(NULL, "open", "c:\\eula.1028.txt", NULL, NULL, 5); } }
此代码按我的意愿启动文件,但立即爆炸。新窗口保持打开状态。
我有另一个版本,像这样:
typedef long (*ShellExecFunct)(long, const char*, const char*, long, long, long); 无效的一些功能() { QLibrary shell32(QString("shell32.dll")); ShellExecFunct viewfile = (ShellExecFunct) shell32.resolve("ShellExecuteA"); 如果(视图文件) { int res = viewfile(NULL, "open", "c:\\eula.1028.txt", NULL, NULL, 5); QMessageBox b; b.setText(QString::number(res,10)); } }
这段代码不会爆炸。请注意,我什至不需要调用 b.exec()。但是,如果我调用 b.exec(),则会显示值 42。
有人能告诉我这里出了什么问题以及我能做些什么来解决它吗?
谢谢。
编辑:
对于后人来说,这里的前提是错误的。Qt 提供了我需要的确切功能,而无需特定于平台的代码。请参阅已接受的答案。