什么是DLL文件?
DLL(Dynamic Link Library,动态链接库)是Windows操作系统中的一种共享库文件格式。它包含可由多个程序同时使用的代码和数据,有助于代码重用和内存效率。
在C语言中调用DLL可以实现功能模块化,将常用功能封装在DLL中,主程序按需加载使用。
调用DLL的基本步骤
在C语言中调用DLL主要通过Windows API实现,需要包含windows.h头文件,主要步骤如下:
- 加载DLL:使用
LoadLibrary函数加载DLL文件 - 获取函数地址:使用
GetProcAddress获取DLL中函数的指针 - 调用函数:通过函数指针调用DLL中的函数
- 释放DLL:使用
FreeLibrary释放DLL资源
完整示例代码
以下是一个调用DLL中函数的完整C语言示例:
#include <stdio.h>
#include <windows.h>
// 定义函数指针类型
typedef int (*AddFunc)(int, int);
int main() {
HINSTANCE hDLL; // DLL模块句柄
AddFunc addFunction; // 函数指针
int result;
// 1. 加载DLL
hDLL = LoadLibrary(L"example.dll");
if (hDLL == NULL) {
printf("无法加载DLL文件!\\n");
return 1;
}
// 2. 获取函数地址
addFunction = (AddFunc)GetProcAddress(hDLL, "add");
if (addFunction == NULL) {
printf("无法找到函数!\\n");
FreeLibrary(hDLL);
return 1;
}
// 3. 调用函数
result = addFunction(5, 3);
printf("调用结果: 5 + 3 = %d\\n", result);
// 4. 释放DLL
FreeLibrary(hDLL);
return 0;
}
关键函数说明
LoadLibrary(L"dll_name"):加载指定的DLL文件,成功返回模块句柄,失败返回NULL。
GetProcAddress(hDLL, "function_name"):从已加载的DLL中获取指定函数的地址。
FreeLibrary(hDLL):释放DLL模块,减少其引用计数。
注意事项:
• 确保DLL文件与可执行文件在同一目录,或在系统路径中
• DLL中的函数需要使用__declspec(dllexport)导出
• 注意字符编码,Windows API建议使用宽字符(L"")
• 调用完成后务必调用FreeLibrary释放资源