当前位置: 首页 > news >正文

外部DLL创建及使用

1. 静态链接库和动态链接库区别

  • 静态链接库中不能再包含其他的动态链接库或者静态链接库;
  • 动态链接库中还可以包含其他的动态或静态链接库。

2. 简单说明一些库的作用

  • kernel32.dll主要处理内存管理和进程调度;
  • user32.dll主要控制用户界面;
  • gdi32.dll负责图形方面的操作;

3. VC++支持的三种DLL

- `Non-MFC DLL`:非MFC动态库,不采用MFC类库结构,导出函数为标准的C接口,能被非MFC或MFC编写的应用程序锁调用;
- `MFC Regular DLL`:MFC规则DLL,包含一个继承自CWinApp的类,没有消息循环;
- `MFC Extension DLL`:MFC扩展DLL,采用MFC的动态链接版本创建,只能被MFC类库编写的应用程序调用;

4. 库的调试

在使用的地方打断点,运行到该出时按F11可以进入库中的函数进行调试。

5. 在函数名前面添加__declspec(dllexport)声明函数为DLL的导出函数

6.VS中动态链接库的使用方法

动态调用

  1. 首先使用typedef定义一个与函数参数类型和返回值均相同的函数指针类型;
typedef 函数返回类型 (*自定义函数指针名字)(参数列表);
  1. 其次,定义一个HINSTANCE句柄,通过Loadibrary动态加载dll模块
HINSTANCE hDLL = LoadLibrary("dll名字");
  1. 再次,使用GetProcAddress加载函数
自定义函数指针名 自定义函数 = GetProcAddress("函数名");
  1. 最后,使用FreeLibrary()释放DLL模块。
FreeLibrary(hDll);

静态调用

#pragma comment(lib,"lib名字")
extern "C" _declspec(dllimport) 函数名(参数列表);

7. 声明导出函数

既可以用_declspec(dllexport),也可以采用模块定义文件声明.def。
示例:
;lib.def:导出函数
LIBRARY dllTest ;说明文件相应的dll
EXPORT ;列出要导出函数的名称
add @ 1

8. 声明类和导出类

#ifdef DLL_FILE
class _declspec(dllexport) class_name  //导出类
#else
class _declspec(dllimport) class_name //导入类

9. QT中静态链接调用

  1. .pro文件中把..h.lib文件包含进去,.cpp头文件中include依赖库头文件;
  2. 调用外部dll中的方法;

10. QT中共享链接/动态链接调用

.cpp中增加#include <QLibrary>

示例:

#include <QCoreApplication>
#include <QLibrary>  // 引入QLibrary类
#include <iostream>typedef int (*Add)(int a,int b);  // 定义函数指针
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QLibrary mylib("MyLib1.dll");if(!mylib.load())  // 加载dll{std::cout << "Load Library Failed" << std::endl;return -1;}Add add = (Add)mylib.resolve("add");  // 定义函数指针对象if(0 == add){std::cout << "Load Function Failed" << std::endl;return -2;}int sum = add(1,2);  // 使用std::cout << "sum=" << sum <<std::endl;return a.exec();
}
http://www.dtcms.com/a/286655.html

相关文章:

  • 灵巧手(具身智能入门十一)
  • if (a == 1 a == 2 a == 3)返回true的问题思考
  • NVIDIA 驱动安装失败问题排查与解决(含离线 GCC 工具链安装全过程)
  • MySQL组内拼接group_concat函数
  • MyUI会员排名VcMember组件文档
  • Java与Vue技术搭建的SRM招标采购管理系统,提供源码,涵盖招标、投标、评标全流程,助力企业高效规范采购管理
  • spring-cloud微服务部署-feign服务间调用
  • NFS读写性能评估与优化指南(下)
  • 二叉搜索树:高效的查找结构
  • 自学力扣:最长连续序列
  • python-pptx 的layout 布局
  • CCF编程能力等级认证GESP—C++1级—20250628
  • 扫地机器人,需要回归第一性原理
  • Docker安装教程
  • Visual Studio C++编译器优化等级详解:配置、原理与编码实践
  • 第七章 愿景07 实习小宇
  • LLC电源设计专题--详细讲解
  • Web开发 02
  • 贪吃蛇(C++实现)
  • 美客多跨境电商平台怎么开店?美客多入驻门槛有哪些?
  • 目标框的位置以及大小的分布
  • 进入当前正在运行的 Docker 容器
  • 应急响应-Windows资源监视器
  • 易用性强短视频矩阵平台源头开发商推荐
  • leetcode:单词接龙[图广搜][无权图找最短路径]
  • 突破性量子芯片问世:电子与光子首次集成,开启量子技术规模化应用新篇章
  • 跨平台猫咪键盘桌宠BongoCat v0.6.2 绿色版(附带多款皮肤包)
  • 集训Demo4
  • 【DEBUG】Debug日志001:RL项目记录
  • 产品研发的永恒难题:质量、速度与成本的三角博弈