DLL动态链接库的创建与使用(实例教程)

一. 什么是动态链接库

  动态链接库是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。动态链接库文件名的扩展名一般是dll,也有可能是drv,sys和fon,它和可执行文件(exe)非常类似,区别在于动态链接库中虽然包含了可执行代码却不能单独执行,而应由应用程序直接或间接调用。
  动态链接库是相对于静态链接而言的。所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。换句话说,函数和过程的代码就在程序的可执行文件中,该文件包含了运行时所需的全部代码。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。而动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息(往往是一些重定位信息)。仅当应用程序被装入内存开始运行时,在操作系统的管理下,才在应用程序与相应的动态链接库之间建立链接关系。当要执行所调用动态链接库中的函数时,根据连接产生的重定位信息,操作系统才转去执行动态链接库中相应的函数代码。
  动态链接库的使用。当要执行所调用动态链接库中的函数时,根据连接产生的重定位信息,操作系统才转去执行动态链接库中相应的函数代码。在VS中创建动态链接库一般都会生成.lib文件和.dll文件,在应用程序项目里使用动态链接库要添加.lib文件,语令#pragma comment(lib,“xxx.lib”),这不是静态库的调用吗?其实这个文件记录了dll中函数的入口地址,所以要像静态库中的.lib文件一样,用同样的方式加到我们的项目里,添加好后直接运行会得到错误:由于找不到xxx.dll,无法执行代码。所以要添加,dll文件,一定要放在项目的.exe同一个路径下。还有几个注意事项:1、可以修改.lib文件的文件名,只要在项目引用它时是它目前的名称,但不能改变.dll的文件名,否则依旧会出现找不到.dll文件的错误。2、.dll文件也要和应用程序的位数相对应,要么都是64位,要么都是32位,不可交叉使用,否则报错应用程序无法正常启动。

二. 创建DLL项目

1. VS搜索模板dll,选择“动态链接库(DLL)”

在这里插入图片描述

2. 配置新项目DLLdemo

在这里插入图片描述
初始化后的界面,其中代码是自动生成的,不需要去修改
在这里插入图片描述

3. 新建自己的DLL

(1). 创建头文件TestDLL.h,它是作用是用来声明需要导出的函数接口

(2). 创建源文件TestDLL.cpp,它的作用是用来实现被声明的函数

在这里插入图片描述

(3). 示例代码

a. TestDLL.h:

 extern "C" _declspec(dllexport) int Add(int a, int b);

extern “C”:作用是告诉编译器代码按C语言的方式进行编译
_declspec(dllexport):此修饰符告诉编译器和链接器被它修饰的函数或变量需要从DLL导出。与其相对的代码是_declspec(dllimport) 此修饰符告诉编译器和链接器被它修饰的函数或变量需要从DLL导入。
int Add(int a, int b)需要被其他程序调用的函数

b.TestDLL.cpp
在这里插入图片描述

4. 编译

在这里插入图片描述
出现无法启动程序是正常的,因为DLL不是可执行的.exe

5. 生成.dll和.lib

Debug文件夹下有.dll和.lib文件是我们需要的。
在这里插入图片描述

三. 调用动态链接库

1. 新建一个c++工程项目TestDLL

在这里插入图片描述

2.将Dlldemo.dll、Dlldemo.lib、TestDLL.h三个文件添加到TestDLL项目文件夹下

在这里插入图片描述

3. 将TestDLL.h添加进TestDLL项目

在这里插入图片描述

4. 编写TestMain.cpp

#include "TestDLL.h"
#pragma comment(lib,"Dlldemo.lib")

在这里插入图片描述

5. 测试结果

在这里插入图片描述
以上就是动态链接库的使用方式,一个简单的示例。

  • 8
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elaine猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值