目录
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
原文:http://www.cnblogs.com/findumars/p/6350227.html