I have some code defined as follows:
typedef long (*ShellExecFunct)(long, const char*, const char*, long, long, long); void some_funct() { QLibrary shell32(QString("shell32.dll")); ShellExecFunct viewfile = (ShellExecFunct) shell32.resolve("ShellExecuteA"); if(viewfile) { int res = viewfile(NULL, "open", "c:\\eula.1028.txt", NULL, NULL, 5); } }
This code launches the file as I want it to, but blows up immediately. The new window stays open.
I have another version like so:
typedef long (*ShellExecFunct)(long, const char*, const char*, long, long, long); void some_funct() { QLibrary shell32(QString("shell32.dll")); ShellExecFunct viewfile = (ShellExecFunct) shell32.resolve("ShellExecuteA"); if(viewfile) { int res = viewfile(NULL, "open", "c:\\eula.1028.txt", NULL, NULL, 5); QMessageBox b; b.setText(QString::number(res,10)); } }
This code does not blow up. Notice I don't even need to call b.exec(). However, if I do call b.exec(), the value 42 is displayed.
Can someone clue me in as to what is going wrong here and what I can do to fix it?
Thanks.
Edit:
For posterity, the premise here is wrong. Qt provides the exact functionality I need without platform-specific code. Please see accepted answer.