我有一些代码定义如下:
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 提供了我需要的确切功能,而无需特定于平台的代码。请参阅已接受的答案。