在此记录一下。各位大神如果有其他方法和思路欢迎一起探讨或者赐教。。
dll 调用接口 :
[cpp] view plain copy class IUIPLUGINBASE { public: //初始化 失败返回-1 // virtual int init() = 0; //input:显示的起始位置x , y 轴坐标 virtual int show(int pos_x , int pos_y = 0) = 0; }; <span style="background-color:rgb(255,102,102)">Q_DECLARE_INTERFACE(IUIPLUGINBASE,"uiplugins/1.0") //这个宏用声明接口</span> 上面代码定义其他程序调用的接口,在这个里面使用一个show的虚函数。 至于virtual 虚函数,展开描述,估计够一章内容的。此处不深探究。dll 实现的头文件:
[cpp] view plain copy #include <QWidget> #include "iuipluginbase.h" class MainDlg : public QWidget,public IUIPLUGINBASE { Q_OBJECT <span style="background-color:rgb(255,102,102)"> Q_INTERFACES(IUIPLUGINBASE)</span> public: explicit MainDlg(QWidget *parent = 0); ~MainDlg(); //input:显示的起始位置x , y 轴坐标 int show(int pos_x , int pos_y); private slots: private: }; dll实现类 [cpp] view plain copy MainDlg::MainDlg(QWidget *parent) : QWidget(parent), ui(new Ui::MainDlg) { } int MainDlg::show(int pos_x, int pos_y) { move(pos_x,pos_y); QWidget::show(); return 1; } <span style="background-color:rgb(255,102,102)">QT_BEGIN_NAMESPACE Q_EXPORT_PLUGIN2(MainDlg, MainDlg) QT_END_NAMESPACE</span> 标红的地方需要特别注意。
调用dll文件的地方加入代码:
[cpp] view plain copy QPluginLoader loader("uiplugins.dll"); IUIPLUGINBASE * P_plug; QObject* loaderplugin= loader.instance(); if(!loader.isLoaded()) qDebug() << loader.errorString(); if (loaderplugin) { P_plug = qobject_cast<IUIPLUGINBASE * >(loaderplugin); P_plug->show(100,100); }
通过上诉代码段,即可实现外部程序调用dll文件。 这个功能还是非常重要的,非常适合多人开发或者在线更新,甚至插件式开发思路。
做个笔记。。有更好思路的大牛们欢迎留下您的建议。