QLibrary 动态加载外部库文件

来源:互联网 发布:售电软件是什么 编辑:程序博客网 时间:2024/05/21 09:26

/*转载请注明出处,谢谢*/

背景:想搭一个软件系统,包含一个主模块,一堆子模块(用于扩展功能)。主模块是一个可执行程序,子模块为动态库,可以加载在主模块中。

问题:每添加一个扩展功能就要修改一下主模块的源程序,在其中添加头文件,lib文件,然后重新编译。很是麻烦。

目标:主模块读一个配置文件,根据其中的内容,动态加载子模块的DLL,以实现扩展功能灵活配置,而不需要每次都修改和重新编译主模块。


下面是个例子:

子模块代码:

extern "C" __declspec(dllexport) int print2(int a, int b);


int print2(int a, int b){printf("VideoDecoderDLL printint!\n");return (a+b);}

主模块代码:

#include <QLibrary>void Shell::Test(){//m_vd->print();int *out=0;typedef int (*myfun)(int, int);       // 定义导出函数类型  QLibrary hdll( "I:/testDll/shell/VideoDecoderD.dll" );        //加载dll,当前目录  if(hdll.load())  {  myfun fun1 = (myfun)hdll.resolve("print2");        //用resolve来解析fun1函数  if ( fun1 )       //解析成功则进行运算并提示相关信息  {  printf("解析成功\n");printf("%d\n",fun1(2,3));  }  else{printf("解析失败\n");}}  }


目前还没解决如何加载一个类,有知道办法的朋友欢迎留言。