使用VisualStudio进行动态链接库开发流程
使⽤VisualStudio进⾏动态链接库开发流程
⼀、动态链接库和动态链接
动态链接库:在 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;
}
糖醋里脊的做法 最正宗的做法国庆70周年短语现在可以编译动态链接库,DLL和相关编译器输出放在解决⽅案⽂件夹正下⽅的“Debug”⽂件夹中。如果创建发布版本(Realse),该输出会放置在“Release”⽂件夹中。 VS的输出应类似于:
四、如何使⽤动态链接库
显然,不管是我们⾃⼰写的动态库(DLL)还是其他来源的动态库,⾸先要考虑的问题就是怎么把它
⽤到我们的项⽬(Project)⾥。这也就是如何使⽤动态链接库的问题。
微软⽂档指出:
若要调⽤函数或访问由 DLL 导出的数据,客户端源代码必须在编译时具有可⽤的声明。在链接时间,链接器需要信息来解析函数调⽤或数据访问。
也就是说,⾄少确保两件事情:
农村医疗保险网上怎么缴费① IDE知道动态库的位置,以便编译的顺利进⾏
初级会计职称报名②我们发布的应⽤程序能够到动态库,以确保程序能够运⾏
所以我们⼀般应该遵循以下原则:
⾸先,为避免不同步的代码,建议在客户端项⽬中设置包含路径,使其直接包括 DLL 项⽬中的 DLL 头⽂件。
此外,在客户端项⽬中设置库路径以包括 DLL 项⽬中的 DLL 导⼊库。
最后,将⽣成的 DLL 从 DLL 项⽬复制到客户端⽣成输出⽬录中。此步骤允许客户端应⽤使⽤⽣成的
同⼀ DLL 代码。
为了清晰地说明这个问题,我们⾛⼀遍流程。⾸先是新建⼀个⼯程ApiClient,我们将在这个⼯程中调⽤先前编写的DLL中的GetNumber_8().
添加DLL到⼯程(编译准备)
接下来,要在源代码中调⽤GetNumber_8函数,你的项⽬必须包括DiyApi.h⽂件。为避免不必要的⿇
烦,我们采⽤以下步骤。
1、右键单击“解决⽅案资源管理器” 中的“ApiClient” 节点以打开“属性页” 对话框。
2、在“配置”下拉框中,选择“所有配置”(如果尚未选择)。
3、在左窗格中,选择“配置属性” > “C/C++” > “常规” 。
4、在属性窗格中,选择“附加包含⽬录” 编辑框旁的下拉控件,然后选择“编辑”
5、在“附加包含⽬录” 对话框的顶部窗格中双击以启⽤编辑控件。或者,选择⽂件夹图标以创建新条⽬。
6、在编辑控件中,指定指向ApiClient.h头⽂件的位置的路径。可选择省略号 (…) 控件浏览到正确的⽂件夹。
还可将客户端源⽂件中的相对路径输⼊到包含DLL头⽂件的⽂件夹。如果已按照指⽰将客户端项⽬置于DLL的单独解决⽅案中,则相对路径应如下所⽰:
..\..\DiyApi\DiyApi
如果DLL和客户端项⽬位于同⼀解决⽅案中,则相对路径可能如下所⽰:
..\DiyApi
如果DLL和客户端项⽬位于其他⽂件夹中,请调整相对路径以进⾏匹配。或者,使⽤省略号控件浏览⽂件夹。
7、在“附加包含项⽬”对话框中输⼊标头⽂件的路径后,选择“确定”按钮。在“属性页”对话框中,选择“确定”按钮以保存更改。
现在可以包括DiyApi.h⽂件,并使⽤它在客户端应⽤程序中声明的函数。相应的ApiClient.cpp的内容如下:
#include "DiyApi.h"
#include <iostream>
using namespace std;
int main()
{
const magicNumber = 8;
/* 获取magicNumber次整数8并输出 */
for(int i=magicNumber;i>0;i--){
cout<<GetNumber_8<<endl;
}
return 0;
}
尝试编译运⾏编译,很棒 ,咱们可以得到⼀堆报错,⾄少有下⾯这条:
LNK2019 :你尚未指定项⽬在 DiyApi.lib 库上有依赖项
因为咱们还没告诉链接器如何查DiyApi.lib⽂件。编译之前,我们还应该应该设置项⽬中的“附加库⽬录” 路径,使其在链接时包含指向原始库的路径,即将DLL 导⼊库添加到项⽬中。
将 DLL 导⼊库添加到项⽬中(链接准备)
1、右键单击“解决⽅案资源管理器”中的ApiClient节点,然后选择“属性”以打开“属性页”对话框。
2、在“配置”下拉框中,选择“所有配置”(如果尚未选择)。它可确保任何属性更改同时应⽤于调试和发布版本。
3、在左窗格中,选择“配置属性” > “链接器” > “输⼊” 。在属性窗格中,选择“附加依赖项” 编辑框旁的下拉控件,然后选择“编辑” 。
4、在“附加依赖项”(Additional Dependencies)对话框中,将 DiyApi.lib 添加到顶部编辑控件的列表中。
5、选择“确定” 返回到“属性页” 对话框。
6、在左窗格中,选择“配置属性” > “链接器” > “常规” 。在属性窗格中,选择“附加库⽬录” 编辑框旁的下拉控件,然后选择“编辑” 。
7、在“附加库⽬录” 对话框的顶部窗格中双击以启⽤编辑控件。在编辑控件中,指定指向DiyApi.lib⽂件位置的路径。默认情况下,它位于DLL解决⽅案⽂件夹下的Debug⽂件夹中。如果创建发布版本,
该⽂件会放置在Release⽂件夹中。可以使⽤ $(IntDir) 宏,这样⽆论创建的是哪种版本,链接器都可到DLL。如果已按照指⽰将客户端项⽬置于DLL项⽬的单独解决⽅案中,则相对路径应如下所⽰:..\..\DiyApi\$(IntDir)
如果DLL和客户端项⽬位于其他位置,请调整相对路径以进⾏匹配。
8、在“附加库⽬录”对话框中输⼊指向库⽂件的路径后,选择“确定”按钮返回到“属性页”对话框。选择“确定”以保存属性更改。
把DLL复制到应⽤⽂件夹(运⾏准备)
客户端应⽤现在可以成功编译和链接,但还不能运⾏。当操作系统加载应⽤时,它会查DiyApi.DLL。如果在某些系统⽬录、环境路径或本地应⽤⽬录中不到这个DLL,那么这个应⽤⾃然就不能运⾏了。高尔夫教程
故⽽我们还需要DLL复制到包含可执⾏⽂件的⽬录中,这也就是“打包发布”过程的⼀部分。
当然了,VisualStudio提供了对应的命令,不想⼿动打包的可以参考微软⽂档中对在的说明,单击即可蓝字查看。
到此这篇关于使⽤Visual Studio进⾏动态链接库开发的的⽂章就介绍到这了,更多相关Visual Studio动态链接库内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。