使用C程序中的Qt库

时间:2014-01-21 19:13:42

标签: c++ c qt dll

Qt非常适合构建应用程序,但有一两次我想从用纯C编写的现有应用程序中显示一个不错的Qt对话框。

我想描述如何创建一个可以由Qt-unaware程序使用的基于Qt的共享或静态库。为了缩小问题范围,让我们假设我们调用一个显示一些对话框或小部件的函数,并且在所有对话框都关闭之前不会返回。否则,如果没有来自托管流程的“合作”,它就无法完成 - 它必须至少为Qt运行消息泵。

在本例中,我将使用Windows程序rundll32.exe加载并执行一个显示Qt about对话框的函数。

1 个答案:

答案 0 :(得分:2)

假设我们的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或Project-> Libraries-> C ++ Library ,项目名称应为{{1} }。

MyQtBasedDll函数的代码非常简单:

MyEntryPoint()

此函数可以由同一个exe多次调用,并且每次构造一个新的extern "C" { __declspec(dllexport) void MyEntryPoint() { if (!QApplication::instance()) { QApplication a(__argc, __argv); QMessageBox::aboutQt(0); } else { QMessageBox::aboutQt(0); } } } 对象时,仅在函数的持续时间内。请注意,我们检查现有实例,以便即使在Qt应用程序调用时我们的DLL也能正常工作。

现在你需要做的就是用你的函数代替QApplication