使用Visual Studio进行动态链接库开发流程

论坛 期权论坛 脚本     
niminba   2021-5-23 04:10   2009   0

一、动态链接库和动态链接

动态链接库:在 Windows 中,动态链接库 (DLL) 是作为函数和资源的共享库的一种可执行文件。在调用它们的应用程序的上下文中运行。

动态链接:动态链接是操作系统功能。操作系统将 DLL 加载到应用程序的内存空间中,它可使执行文件调用函数或使用存储在单独文件中的资源。

动态链接库有什么用: DLL 可以在可执行文件之间轻松共享函数和资源。 多个应用程序可同时访问内存中单个 DLL 副本的内容。

二、和静态链接的区别

这部分我们只需要知道静态链接把所有的执行需要的库都打包到可执行文件里面了,动态链接则是把各个库独立出来,在运行时由操作系统将 DLL 加载到应用程序的内存空间中。

在Windows上具体一些就是:

静态链接将静态库中的所有对象代码复制到生成时使用它的可执行文件中。 动态链接仅包括 Windows 在运行时用于查找和加载含有数据项或函数的 DLL 所需的信息。 创建 DLL 时,还将创建包含此信息的导入库。 生成调用 DLL 的可执行文件时,链接器会使用导入库中的导出符号来为 Windows 加载程序存储此信息。 当加载程序加载 DLL 时,该 DLL 会映射到你的应用程序的内存空间中。 如果存在,则调用 DLL 中的特殊函数 DllMain,以执行 DLL 所需的任何初始化。

也可以直接看看微软技术文档的介绍,单击蓝字访问。

三、用VS生成动态库的基本流程

这里我们使用C++语言开发,对于环境有的要求如下:

1、Visual Studio。
2、VS中安装了 “C++ 的桌面开发” 工作负载。 如果在安装 Visual Studio 时未安装此工作负载, 可以再次运行安装程序并立即安装。

Visual Studio的安装和配置可以参考这个链接,单击蓝字访问即可。

具体步骤如下:

①在 Visual Studio 2019 中创建 DLL 项目

在菜单栏上,选择“文件”>“新建”>“项目”,打开“创建新项目”对话框 。选择如下图所示的项目类型。

在这里插入图片描述

接下来,创建一个头文件来声明 DLL 导出的函数,然后将函数定义添加到 DLL,使其具备更强大的功能(被其他执行文件调用)。

②将头文件添加到 DLL(.h文件)

若要为函数创建头文件,请在菜单栏上选择“项目” > “添加新项” 。也就是往这个项目里面添加一个头文件,大伙应该都知道咋个弄。
图例添加了一个名为MathLibrary.h 的头文件,这里随意用啥名儿都行,主要看操作步骤。我们统一设定为DiyApi.h

在这里插入图片描述

然后把头文件DiyApi.h的内容写成这样:

#pragma once
//声明一个作为API的函数
//并对函数GetNumber_8()声明设置 __declspec(dllexport) 修饰符。
extern "C" __declspec(dllexport) int GetNumber_8();

这里的函数GetNumber_8()将会作为我们这个DLL的一个API,用于被其它执行文件调用。

__declspec(dllexport)指示编译器和链接器从 DLL 导出函数或变量,以便其他应用程序可以使用它。此修饰符可优化应用程序中函数或变量的导入。可以参阅微软的说明文档,单击蓝字即可查看。

③向 DLL 添加实现(.c文件)

还是强调过程,我们把函数的功能搞得简单点:

#include "DiyApi.h"
#include <stdio.h>
/** 
 brief:返回int类型的数字8
 arg:None
 retval:8
**/
int GetNumber_8()
{
 int ConstNumber = 8;
    return ConstNumber;
}

现在可以编译动态链接库,DLL 和相关编译器输出放在解决方案文件夹正下方的“Debug”文件夹中 。 如果创建发布版本(Realse),该输出会放置在“Release”文件夹中 。 VS的输出应类似于:

在这里插入图片描述

..\..\DiyApi\$(IntDir)

如果 DLL 和客户端项目位于其他位置,请调整相对路径以进行匹配。
8、在“附加库目录”对话框中输入指向库文件的路径后,选择“确定”按钮返回到“属性页”对话框 。 选择“确定”以保存属性更改 。

把DLL复制到应用文件夹(运行准备)

客户端应用现在可以成功编译和链接,但还不能运行。 当操作系统加载应用时,它会查找 DiyApi.DLL。 如果在某些系统目录、环境路径或本地应用目录中找不到 这个DLL,那么这个应用自然就不能运行了。

故而我们还需要DLL 复制到包含可执行文件的目录中,这也就是“打包发布”过程的一部分。

当然了,VisualStudio提供了对应的命令,不想手动打包的可以参考微软文档中对在生成后事件中复制 DLL的说明,单击即可蓝字查看。

到此这篇关于使用Visual Studio进行动态链接库开发的的文章就介绍到这了,更多相关Visual Studio动态链接库内容请搜索社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持社区!

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP