C/C++动态链接库的封装和调用

发布于:2024-03-19 ⋅ 阅读:(60) ⋅ 点赞:(0)

1 引言

静态链接库是在编译时被链接到程序中的库文件,在编译时,链接器将静态链接库的代码和数据复制到最终的可执行文件中。动态链接库是在程序运行时加载的库文件,在编译时,可执行文件只包含对动态链接库的引用,而不包含实际的库代码和数据。静态链接库占更多存储内存,程序比较大;动态链接库占更多运行内存。 

2 动态链接库封装步骤

① 新建一个“封装”工程,取名为DLLPackage。

② 新建一个头文件和一个源文件。

③ 在头文件声明动态链接库的导入或者导出以及DLL里面可调用的函数 

 代码解释说明:

  •  #pragma once的作用:用于确保头文件只被编译一次。 
  • 如果在源文件中定义了宏MyDLL_EXPORT,则导出动态链接库,供其它程序调用;如果没有定义MyDLL_EXPORT ,则导入动态链接库,调用动态链接库的函数。此时源文件中未定义宏MyDLL_EXPORT,所以代码的高亮部分是else里面的内容。
  • 在MyDLL中声明一个加法函数add。
  • 在MyDLL中声明一个类MyFun,类里面减法函数substration。注:声明的时候classMyDLL前,否则会报错。

④ 源文件中定义宏以及对应的函数和类

代码解释说明:

  • 定义宏 MyDLL_EXPORT,此时头文件中高亮的是if里面的内容

  • 包含头文件,注:必须先定义宏,再#include头文件
  • int add() 定义一个加法函数
  • int MyFun::subtraction定义类里面的一个减法函数

⑤ 生成动态链接库

(1)右键项目,选择属性

(2)将配置类型改成动态库(.dll),同时可设置动态链接库的输出路径,不设置则输出至默认路径

(3)点击生成解决方案。

3 动态链接库调用步骤

3.1 调用简介

调用动态链接库需要三个文件:

  • ① 头文件(.h
  • .dll
  • .lib
.lib 文件: .lib  文件是动态链接库的导入库文件( import library file )。它包含了函数和变量的声明以及链接信息,但不包含实际的函数代码。当你在代码中调用动态链接库的函数时,编译器会使用  .lib  文件来查找函数的声明和链接信息,以便在程序运行时能够正确地调用动态链接库中的函数。
.dll 文件: .dll  文件是动态链接库的实际二进制文件,它包含了函数的实际代码和数据。在程序运行时,操作系统会动态加载  .dll  文件,并将其中的函数代码映射到程序的地址空间中,以便程序可以调用动态链接库中的函数。

3.2 调用步骤

新建一个“调用”工程 DLLCall ,同时新建一个头文件和源文件。

② 将动态链接库的头文件放到DLLCall工程里。 

③ .dll文件和.lib文件放到.exe的同目录下。比如设置的是Debug+x64,就放在x64/Debug路径下(路径查找可参考博文VS里面执行文件默认存放路径梳理——C++语言-CSDN博客)。

 ④  链接到动态链接库的路径,在附加库目录里添加.dll.lib文件的存放目录

⑤ 附加依赖项里添加.lib文件的名称

 ⑥ 在头文件里#include动态链接库的头文件。

⑦ 测试验证

运行结果如下:

4 其它小技巧

介绍一种动态链接库封装和调用联动小技巧 。上述步骤每次“封装” 工程生成的动态链接库,都需要手动复制到“调用”工程的exe文件的同目录下,为了更加方便地操作,可以将生成动态链接库的输出路径设置成“调用”的exe文件的同目录,这样当“封装”里的头文件不变时,更改代码后,点击一下“封装”里的生成,就可以在“调用”里面运行了,可以大大提高调试效率

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到