当前位置: 首页 > 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.lryc.cn/news/592815.html

相关文章:

  • react控制react Popover组件显示隐藏
  • Agent AI(3):Agent分类
  • Jenkins pipeline 部署docker通用模板
  • 网关-微服务网关入门
  • 《Qt数据库》知识点实践
  • VisualXML全新升级 | 新增BusLoad计算
  • 在 OpenSUSE Tumbleweed 和 Leap 上安装 VirtualBox
  • ChatGPT Agent:统一端到端Agentic模型的技术革新与行业影响
  • Sui 在非洲增长最快的科技市场开设 SuiHub Lagos 以推动创新
  • 质变科技亮相可信数据库发展大会,参编《数据库发展研究报告2025》
  • 读书笔记:《动手做AI Agent》
  • 飞算科技:以创新科技引领数字化变革,旗下飞算 JavaAI 成开发利器
  • 软件工程中的《资本论》
  • KRaft 角色状态设计模式:从状态理解 Raft
  • Redis学习其二(事务,SpringBoot整合,持久化RDB和AOF)
  • java基础——面向对象04(继承)
  • 通俗易懂:什么是决策树?
  • STM32-第七节-TIM定时器-3(输入捕获)
  • STL—— list迭代器封装的底层讲解
  • 小白学Python,网络爬虫篇(2)——selenium库
  • 2025年Flutter开发主流技术栈
  • Windows发现可疑的svchost程序
  • 怎么自己搭建云手机
  • Hive 向量化执行引擎 Vectorized Execution 常见 NPE 报错分析及解决
  • 域名WHOIS信息查询免费API使用指南
  • HIVE实战处理(二十四)留存用户数
  • 专题:2025智能体研究报告|附70份报告PDF、原数据表汇总下载
  • 线程控制:互斥与同步
  • math.h函数
  • 深度学习零基础入门(3)-图像与神经网络