Visual Studio 使用C++制作DLL 库

Visual Studio 使用C++制作DLL 库

Visual Studio 使用C++制作DLL 库

一、为什么需要 DLL?

.dll文件是Dynamic Link Library(动态链接库)文件的缩写,它是一种共享库文件,包含了程序所需的代码和数据。 与静态链接库不同,动态链接库可以在程序运行时动态加载,使得程序的内存占用更小,同时也方便了程序的更新和维护。

编程中的 DLL:

DLL (Dynamic Link Library) 是一个包含代码和数据的文件,可以被多个程序同时使用。

优点:

代码复用:多个程序可以共享同一个 DLL,减少磁盘和内存占用。

模块化开发:不同团队可以独立开发 DLL,然后集成到主程序中。

便于更新:只需更新 DLL 文件,无需重新编译整个程序。

常见应用场景:

Windows 系统中的 user32.dll(处理窗口和消息)、kernel32.dll(系统核心功能)。

游戏中的插件系统(如《魔兽世界》的插件)。

软件开发中的第三方库(如 SQLite、OpenCV)。

二、DLL 与普通程序的区别

特性

普通可执行文件 (.exe)

DLL 文件 (.dll)

是否可以独立运行?

✅ 可以直接双击运行

❌ 必须由其他程序加载和调用

入口函数

main() 或 WinMain()

无显式入口,由系统自动初始化

用途

独立应用程序

为其他程序提供功能

加载方式

程序启动时一次性加载

动态加载(按需加载)

动态链接 vs 静态链接:

静态链接:编译器将库的代码直接复制到可执行文件中,生成的 .exe 文件体积大,但无需依赖外部文件。

动态链接:程序运行时才加载 DLL,多个程序可以共享同一个 DLL,节省内存。

三、DLL 的核心概念

1.导出与导入

导出 (Export):DLL 中哪些函数或变量可以被外部访问。

类比:图书馆的哪些书籍可以外借(如教科书可以借,工具书只能在馆内查阅)。

导入 (Import):程序如何使用 DLL 中的导出内容。

2.__declspec(dllexport) 关键字

作用:告诉编译器 “这个函数 / 类 / 变量要导出到 DLL 中,让外部程序可以使用”。示例:

// 导出一个加法函数

__declspec(dllexport) int Add(int a, int b) {

return a + b;

}

3.导出表 (Export Table)

DLL 文件内部有一张 “清单”,记录了所有导出的函数和变量。可以用工具(如 Visual Studio 的 dumpbin 命令)查看导出表:

dumpbin /exports MyDLL.dll

4.C++ 名称修饰 (Name Mangling)

C++ 为支持函数重载,会将函数名修改为包含参数类型和返回值的复杂名称(如 Add(int, int) 可能变成 ?Add@@YAHHH@Z)。问题:其他语言(如 C#)无法识别这种名称。解决方案:使用 extern "C" 保持 C 语言的命名方式:

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

🎯 相关推荐

交换机怎么接(交换机的正确连接方法)[含示意图]
365bet注册送钱

交换机怎么接(交换机的正确连接方法)[含示意图]

📅 07-09 👁️ 4275
网贷逾期多久成黑户:逾期多久会被冻结、起诉,是否影响坐车及上黑名单
成语此什么彼什么成语,成语此什么彼什么意思
365bet体育在线怎么样

成语此什么彼什么成语,成语此什么彼什么意思

📅 06-28 👁️ 6242
模块化的百变玩咖:moto z2 play评测
365bet注册送钱

模块化的百变玩咖:moto z2 play评测

📅 07-30 👁️ 203
如何高效上传文件至云端存储:实用技巧与最佳实践
韩红现任空政文工团副团长 军衔为大校
365bet体育在线怎么样

韩红现任空政文工团副团长 军衔为大校

📅 07-23 👁️ 8203