动态链接库(Dynamic Link Library,简称DLL)是在运行时加载的库,它们的代码和数据在内存中与目标程序共享;这意味着多个程序可以共享相同的库实例,并且库的代码可以在不重新编译目标程序的情况下更新。
工作原理
开发人员创建一个或多个动态链接库,其中包含他们想要重用的代码。 在编译目标程序时,链接器会在可执行文件中包含对动态链接库的引用,但不会将库的代码复制到可执行文件中。 在运行时,操作系统的动态链接器(如Windows中的DLL或Linux中的.so文件)会将库加载到内存中,并将其与目标程序共享。
动态链接库优点:
多个程序可以共享相同的库实例,因此不会重复占用内存空间;库的代码可以在不重新编译目标程序的情况下更新。
动态链接库缺点:
程序需要在运行时访问正确版本的库,否则可能会导致运行时错误;与静态链接相比,动态链接可能会增加启动时间和内存占用,因为需要在运行时加载和链接库。
在Windows平台上,DLL可以由多种编程语言编写,包括C、C++、C#等。开发人员可以使用工具如Microsoft Visual Studio等来创建、编译和管理DLL。通常,DLL文件具有.dll
的文件扩展名。
DLL生成和使用:
生成DLL:
在 Windows 平台上,创建和使用 DLL(Dynamic Link Library)通常涉及以下步骤:
1.编写源代码: 编写你的 DLL 的源代码,包括需要导出的函数、变量以及其他需要在 DLL 中使用的代码,通常需要源代码+头文件(调用DLL中的代码可以根据头文件进行)。
示例:
①tool.h中的代码:声明一个add函数,可以使用add函数计算两个数相加。
#pragma once
#include<stdio.h>
__declspec(dllexport) int add(int nNumberA, int nNumberB);
②tools.c中的代码:add函数的具体实现
#include "tools.h"
__declspec(dllexport) int add(int nNumberA, int nNumberB)
{
return nNumberA+nNumberB;
}
__declspec(dllexport)
关键字来标记需要在 DLL 中导出的函数和数据的声明;这将告诉编译器要将这些函数和数据导出到 DLL 中。
2.在VS中设置生成DLL文件
右击项目-->选择属性,打开项目属性页;
在项目属性页中设置代码生成类型为动态库(.dll),目标文件名根据自喜设置,目标文件扩展名点击应用后VS会自动修改;
3.生成 DLL 文件: 右击项目--->选择生成;
在输出中获取.dll
文件生成的路径;
根据路径打开.dll
文件所在的文件夹,会发现除了.dll
动态库文件外,VS还生成了一个.lib
文件;
这个.lib
文件通常是用于动态链接的导入库(Import Library),而不是静态链接库文件;要注意区分。导入库(Import Library)是用于在编译时指示链接器如何链接 DLL 的文件。它包含了对 DLL 中函数和数据的引用,以便在编译时将它们链接到最终的可执行文件中。
DLL文件的使用
打开需要用到生成的DLL文件的项目的所在文件夹;
将上述.h
头文件、.dll
动态链接库文件、.lib
导入库文件复制到该项目的文件夹中;
接着通过添加现有项将头文件.h
导入项目头文件中,将.lib
导入库文件导入资源文件中;
导入完成后就可以在项目代码中使用动态连接库文件中的函数或变量等代码了;
#include <stdio.h>
int main()
{
printf("%d", add(5, 5));
}
最后的执行结果:
DLL文件使用成功。