qt调用动态库注意点
来源:互联网 发布:韩信点兵的算法 编辑:程序博客网 时间:2024/05/21 07:58
创建动态库的时候注意点:
1、 创建动态库后,想要建立一个新的类,那么一定要在类的头文件 class 前加入***(工程名)SHARED_EXPORT。
调用动态库注意点:
1、 确认动态库是否和本项目使用同一个编译器编译的,以及在build的时候注意,如果项目是build Debug模式下,那么调用的动态库也必须是build Debug编译的,必须对应。(如果项目需要调试,那么调用build Debug编译的动态库,等程序发布的时候,重新修改pro文件导入release版的动态库,在发布)。
2、 调用动态库有两种方法
尝试了在Qt调用VS动态库的2种方法:显式加载和隐式加载。Qt版本采用5.1,使用的默认编译器gcc;VS使用2010。详细过程如下:
(1)在VS2010中导出动态库,导出过程未使用windows平台相关的代码。
1 /*************************************** 2 * MyDll.h 3 ***************************************/ 4 #ifndef MYDLLEXPORT 5 #define MYDLLEXPORT extern "C" __declspec(dllimport) 6 #endif 7 8 9 MYDLLEXPORT int add(int a, int b);10 MYDLLEXPORT int g_nCount;
1 /*************************************** 2 * DllDemo.cpp 3 ***************************************/ 4 #define MYDLLEXPORT extern "C" __declspec(dllexport) 5 #include "MyDll.h" 6 7 int g_nCount = 0; 8 9 int add(int a, int b){10 return (g_nCount += a + b);11 }
编译后生成2个文件:DllDemo.lib,DllDemo.dll。
(2)Qt中实现调用
不同调用方式需要的文件不同,对于显式加载只需要*.dll;隐式加载需要*.h,*.dll。这里只贴出部分代码如下:
- 显式
显式调用需要将*.dll文件复制到生成目录的执行文件所在路径下(.exe所在),注意的是Qt Creator中生成目录是在源码目录外的。然后在代码中Load。
1 QLibrary lib("DllDemo"); // 不需要后缀 2 if (lib.load()) 3 { 4 typedef int(*AddFunction)(int a,int b); 5 AddFunction Add=(AddFunction)lib.resolve("add"); 6 if (Add) 7 { 8 int res = Add(20, 155); 9 ui->lineEdit->setText(QString("%1").arg(res));10 }11 }
- 隐式
隐式加载时在*.pro手动添加:LIBS+=DllDemo.dll,然后倒入所需头文件,在调用处包含并调用其中的接口即可。
1 /***************************************2 * LIBS += DllDemo.dll 3 ***************************************/4 #include "MyDll.h"5 // 隐式调用 6 int res = add(20, 155);7 ui->lineEdit->setText(QString("%1").arg(res));
以上过程中调用动态库只是简单的C函数,关于C++类或包含win32的导出库待后研究......
阅读全文
0 0
- qt调用动态库注意点
- VS2013 动态链接库下,动态调用和静态调用的注意点事项
- JavaScript调用Qt本地对象的几点注意!
- JavaScript调用Qt本地对象的几点注意!
- Qt 调用动态库 插件
- QT 4.7动态库调用
- 动态库使用的几个注意点
- 创建动态库的时候注意点
- AOP调用注意点
- QT小小细节注意点
- qt.pro相关注意点
- jQuery 动态传递函数注意点
- Unity3D 动态批处理注意点
- ios-动态调试注意点
- QT调用动态库的方法
- Qt 调用外部C动态库
- QT调用动态链接库实例
- C++ Qt 调用动态库 插件
- ROS学习笔记(五):服务初探
- 【学习笔记】 linux中安装配置java
- 计算机网络--概述(第七版)
- bigchaindb源码分析(三)——后端存储
- 重拾Java——一些小的知识点(2)
- qt调用动态库注意点
- java面试题(一)
- Scala学习: 字符串插值
- HTML+CSS进阶学习摘录(文本效果)(四)
- Struts2系列之结果视图 Result
- java中构造方法的调用和简单解释(this)
- Android中Mqtt协议的使用
- 将本地文本文件直接导入hive(impala好像不支持)表中
- Codeforces 358D Dima And Hares DP