[英]Using a Qt library from a C program
Qt非常适合构建应用程序,但有一两次我想用纯C编写的现有应用程序显示一个很好的Qt对话框。
我想描述如何创建一个Qt-unaware程序可以使用的基于Qt的共享或静态库。 为了缩小问题范围,让我们假设我们调用一个显示一些对话框或小部件的函数,并且在所有对话框都关闭之前不会返回。 否则,如果没有来自托管过程的一些“合作”,它就无法完成 - 它必须至少为Qt运行消息泵。
在这个例子中,我将使用Windows程序rundll32.exe
来加载和执行一个显示Qt about对话框的函数。
假设我们的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 ,项目名称应该是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);
用你的功能做有用的东西!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.