Qt DLL总结【三】-VS2008+Qt 使用QPluginLoader访问DLL

转载自http://qimo601.iteye.com/blog/1402501

开发环境: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(从上面的项目拷贝过来的)

 

Qt DLL总结【三】-VS2008+Qt 使用QPluginLoader访问DLL_第1张图片

 

 

程序建立步骤

 

 

步骤一、在VS里新建立一个DLL项目,名称PluginDll。

  1.      把自动生成的三个代码文件(PluginDll.h、PluginDll_global.h、PluginDll.cpp)直接删掉,这三个是Qt自己的建立Qt Dll的推荐方法,我们暂时用不到。
  2.      自己新建如下三个文件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
Cpp代码 复制代码  收藏代码

   

  
Cpp代码 复制代码  收藏代码

 

Cpp代码 复制代码  收藏代码

  

 

步骤二、在VS里新建立一个ApplicationL项目,名称PluginConsole。

  1.     将前面PluginDll项目中的接口头文件PlugInterface.h拷贝到PluginConsole项目中;
  2.     因为plugin.dll已经在解决方案的Debug文件中了,暂时就不需要拷贝到PluginConsole项目中来了。如果没有需要拷贝过来才能引用
    在main.cpp中通过QPluginLoader调用PluginDll.dll
Cpp代码 复制代码  收藏代码
  1. #include <QtCore/QCoreApplication>   
  2. #include "PlugInterface.h"   
  3. #include <QPluginLoader>   
  4. #include <QDebug>   
  5. int main(int argc, char *argv[])   
  6. {   
  7.     QCoreApplication a(argc, argv);   
  8.     PlugInterface *plugObject;    
  9.     //不知道为啥,路径我写成下面就出错呢?编译可以通过,运行时会提示异常   
  10.     //QPluginLoader  pluginLoader("PluginDll.dll");   
  11.     //加载插件   
  12.     QPluginLoader  pluginLoader("../Debug/PluginDll.dll");    
  13.     //   
  14.     QObject *plugin = pluginLoader.instance();      
  15.     if (plugin)   
  16.     {   
  17.         qDebug() << "instance success";   
  18.         //使用qobject_cast将QObject类型转换成我们想要的PlugInterface类对象  
  19.         plugObject= qobject_cast<PlugInterface *>(plugin);       
  20.         plugObject->helloWorld();       
  21.         plugObject->testPlugin();   
  22.     }   
  23.     else  
  24.         qDebug() << "instance fail";   
  25.     return a.exec();   
  26. }  

你可能感兴趣的:(header,application,dll,qt,library,interface)