04 QT创建和加载动态库-②显示加载
来源:互联网 发布:3d打印耗材 淘宝 编辑:程序博客网 时间:2024/05/17 01:00
显示加载与隐式加载的异同
- 同:
- 插件工程中要导出的函数和类在定义时依旧加***_EXPORT,以示可被外部调用
- 调用工程的pro文件中依旧 要加 INCLUDEPATH和 LIBS(原本以为因为程序中动态调用所以不用加后来链接失败,所以还是得加)
异:
插件工程中函数要添加对外接口,类要添加对外实例化接口如:
extern “C”{PLUSSHARED_EXPORT void getPlus(Plus*& p_plus);}
调用工程中添加QLibrary 库加载
#include <QLibrary>bool MainWindow::generate_plus(){QLibrary mylib("D:/workspace/Public_lib/plus.dll");if(mylib.load()){..}
实现
插件工程和测试工程整体如下:
实现-插件工程
- 创建一个c++动态库工程名为plus.
在plus.h 中添加如下函数
class PLUSSHARED_EXPORT Plus{public: Plus(); int f_add(int x,int y);//一个测试函数};//一个对外实例化接口extern "C"{PLUSSHARED_EXPORT void getPlus(Plus*& p_plus);}
- 在plus.cpp 中实现这两个函数,其余不做修改
C++
int Plus::f_add(int x,int y){ return x + y ;}
void getPlus(Plus*& p_plus){p_plus = new Plus();} - 插件工程至此完毕,编译后复制出插件工程的*.lib 和*.dll (MINGW 下是*.a) 复制到一个插件存放目录.
实现-测试工程
- 测试工程还是随意生成了一个QWidget Application。
pro文件中添加插件路径
INCLUDEPATH += $$PWD/../Public_lib LIBS += -L$$PWD/../Public_lib -lplus
在MainWindow中添加如下定义
#include <QMainWindow> #include "plus.h" /*增加一个函数指针对应在插件工程中的void getPlus(Plus*& p_plus)函数*/ typedef void (*ty_getPlus)(Plus*&); namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); bool generate_plus(); private: Ui::MainWindow *ui; //增加一个对象指针 Plus* myplus; };
在MainWindow.cpp 中添加调用实现。并将调用添加到构造函数。
#include <QLibrary>bool MainWindow::generate_plus(){ QLibrary mylib("D:/workspace/Public_lib/plus.dll"); if(mylib.load()){ ty_getPlus fp_getplus = (ty_getPlus)mylib.resolve("getPlus"); if(fp_getplus){ (fp_getplus)(myplus); if(myplus){ std::cout << "my plus func has load sucess and test f_add(55,88):"<<myplus->f_add(55,88)<<std::endl; } else{std::cout << "my getins has filed" << std::endl;return false;} } else{std::cout << "load getplus filed" <<std::endl;return false;} } else{std::cout << "load plus.dll filed"<<std::endl;return false;} return true;}
- 编译后执行结果
阅读全文
0 0
- 04 QT创建和加载动态库-②显示加载
- Qt plugin 的创建和动态加载
- 03 QT创建和加载动态库-①隐式加载
- QT 加载动态库
- Qt动态库加载
- QT加载动态库
- Qt加载动态库
- Qt动态加载动态库
- 显示加载动态库
- 动态创建和加载assembly
- qt 下加载 动态库
- Qt加载动态链接库
- Qt加载动态链接库
- QT 动态库加载失败
- Qt 加载动态链接库
- Qt 加载动态库DLL
- 浅谈Qt动态加载动态库
- QT 加载静态库和动态库的方法
- 高效快捷解决一个TextView显示多种字体的控件SpannableTextView
- Apache log归档和删除
- Qt5 头文件中加入Q_OBJECT出错
- Mybatis分页插件-PageHelper的使用
- 乐观锁悲观锁
- 04 QT创建和加载动态库-②显示加载
- js去掉首尾空格字符
- python 3.4.3 下载安装与环境配置
- json中含有特殊字符串如何处理
- 承载网络
- H5+GeoLocation获取地理位置
- 个人ubuntu安装后的操作安装顺序
- POJ 2369 Permutations (置换群)
- PHP 安装