标签:file 技术分享 classname else 链接 虚函数 自动生成 访问 修改
目录
Qt DLL总结【一】-链接库预备知识
Qt DLL总结【二】-创建及调用QT的 DLL
Qt DLL总结【三】-VS2008+Qt 使用QPluginLoader访问DLL
开发环境:VS2008、Qt4.7.4,附件有源码可供下载
最近在总结如何访问DLL中的类对象及其成员函数,其中一种方法利用Qt的QPluginLoader类就可以方便快捷的访问DLL中的类,以及其中的类成员函数。
文件结构如下图:
解决方案名:TestPlugin
1、Qt的Library项目(PluginDll):PlugInterface.h、PluginInstance.h、PluginInstance.cpp
2、Qt的Console Application项目(PluginConsole):main.cpp、PlugInterface.h(从上面的项目拷贝过来的)

程序建立步骤
步骤一、在VS里新建立一个DLL项目,名称PluginDll。
- 把自动生成的三个代码文件(PluginDll.h、PluginDll_global.h、PluginDll.cpp)直接删掉,这三个是Qt自己的建立Qt Dll的推荐方法,我们暂时用不到。
- 自己新建如下三个文件PlugInterface.h、PluginInstance.h、PluginInstance.cpp
备注:如果步骤一建立成一个exe应用项目,也可以通过改两个项目配置参数实现,生成DLL。
一是修改Configuration Properties/General/Configuration type的值,将Application (.exe)改成Dynamic Library (.dll) ,
二是修改Configuration Properties/Linker/General/Output File 的值,将$(OutDir)\$(ProjectName).exe改成$(OutDir)\$(ProjectName).dll
- #ifndef PLUGINTERFACE_H
- #define PLUGINTERFACE_H
-
- #include <QtPlugin>
- class PlugInterface
- {
- public:
- virtual ~PlugInterface(){}
-
- virtual void testPlugin() = 0;
- virtual void helloWorld() = 0;
- };
- QT_BEGIN_NAMESPACE
- Q_DECLARE_INTERFACE(PlugInterface, "PlugInterfaceDll/1.0");
- QT_END_NAMESPACE
- #endif // PLUGINTERFACE_H
-
- #ifndef PLUGININSTANCE_H
- #define PLUGININSTANCE_H
-
- #include "PlugInterface.h"
- #include <QObject>
- class PluginInstance : public QObject, PlugInterface
- {
- Q_OBJECT
-
-
- Q_INTERFACES(PlugInterface)
- public:
- PluginInstance();
- ~PluginInstance();
-
- void testPlugin();
-
- void helloWorld();
- };
-
- #endif // PLUGININSTANCE_H
- #include "PluginInstance.h"
- #include <QtCore>
- PluginInstance::PluginInstance()
- {
- }
- PluginInstance::~PluginInstance()
- {
- }
- void PluginInstance::testPlugin()
- {
- qDebug() << "test";
- }
- void PluginInstance::helloWorld()
- {
- qDebug() << "helloWorld";
- }
- Q_EXPORT_PLUGIN2("PluginInstance", PluginInstance)
步骤二、在VS里新建立一个ApplicationL项目,名称PluginConsole。
- 将前面PluginDll项目中的接口头文件PlugInterface.h拷贝到PluginConsole项目中;
- 因为plugin.dll已经在解决方案的Debug文件中了,暂时就不需要拷贝到PluginConsole项目中来了。如果没有需要拷贝过来才能引用
在main.cpp中通过QPluginLoader调用PluginDll.dll
- #include <QtCore/QCoreApplication>
- #include "PlugInterface.h"
- #include <QPluginLoader>
- #include <QDebug>
- int main(int argc, char *argv[])
- {
- QCoreApplication a(argc, argv);
- PlugInterface *plugObject;
-
-
-
- QPluginLoader pluginLoader("../Debug/PluginDll.dll");
-
- QObject *plugin = pluginLoader.instance();
- if (plugin)
- {
- qDebug() << "instance success";
-
- plugObject= qobject_cast<PlugInterface *>(plugin);
- plugObject->helloWorld();
- plugObject->testPlugin();
- }
- else
- qDebug() << "instance fail";
- return a.exec();
- }
综合了网上很多的例子,很难直接运行,最后自己总结出来的例子在附件上,可以直接运行。
那些参考链接,就不一一引用了,在此谢谢各位的帮助!
http://qimo601.iteye.com/blog/1402501
Qt DLL总结【三】-VS2008+Qt 使用QPluginLoader访问DLL
标签:file 技术分享 classname else 链接 虚函数 自动生成 访问 修改
原文地址:http://www.cnblogs.com/findumars/p/6350227.html