假设我们的 DLL 名为 MyQtBasedDll.dll,它有一个导出函数 - void MyEntryPoint()。
我们将使用命令行rundll32.exe MyQtBasedDll.dll,MyEntryPoint 运行它。请注意,您需要提供 exe 和 dll 的完整路径。
为了让rundll32.exe 加载和使用程序,MyEntryPoint() 应该有一个 C 调用约定。此外,我们需要一个 QApplication 实例来执行任何 GUI 操作,而 rundll32.exe 显然不会为我们创建它。
要使用Qt Creator创建Qt库,我们可以选择File->New File or Project->Libraries->C++ Library,项目名称应为MyQtBasedDll。
MyEntryPoint() 函数的代码非常简单:
extern "C"
{
__declspec(dllexport) void MyEntryPoint()
{
if (!QApplication::instance()) {
QApplication a(__argc, __argv);
QMessageBox::aboutQt(0);
} else {
QMessageBox::aboutQt(0);
}
}
}
这个函数可以被同一个exe调用多次,每次构造一个新的QApplication对象,只在函数执行期间。请注意,我们会检查现有实例,因此即使被 Qt 应用程序调用,我们的 DLL 也能正常工作。
现在你需要做的就是用你的函数替换 QMessageBox::aboutQt(0); 来做有用的事情!