什么是DLL文件?
DLL(Dynamic Link Library,动态链接库)是Windows系统中一种包含可由多个程序同时使用的代码和数据的文件。通过调用DLL,可以实现代码复用、模块化开发和节省内存。
调用方式概述
在C语言中调用DLL主要有两种方式:
- 隐式链接(静态加载):编译时链接.lib文件,程序启动时自动加载DLL。
- 显式链接(动态加载):运行时通过
LoadLibrary和GetProcAddress手动加载DLL和函数。
显式调用DLL示例
以下是一个使用LoadLibrary动态调用DLL的完整C语言示例:
#include <windows.h>
#include <stdio.h>
typedef int (*AddFunc)(int, int);
int main() {
HINSTANCE hDll = LoadLibrary(TEXT("mylib.dll"));
if (hDll == NULL) {
printf("无法加载 DLL\n");
return 1;
}
AddFunc add = (AddFunc)GetProcAddress(hDll, "add");
if (add == NULL) {
printf("无法找到函数 add\n");
FreeLibrary(hDll);
return 1;
}
int result = add(3, 4);
printf("3 + 4 = %d\n", result);
FreeLibrary(hDll);
return 0;
}
注意事项
- 确保DLL文件与可执行程序在同一目录,或位于系统PATH路径中。
- 函数导出需使用
__declspec(dllexport)(在DLL源码中)。 - 调用完成后务必使用
FreeLibrary释放资源。 - 注意字符集问题(ANSI vs Unicode),建议使用
TEXT()宏或明确指定A/W后缀函数。
总结
通过显式加载方式,C语言可以在运行时灵活调用DLL中的函数,适用于插件系统、模块热更新等场景。掌握LoadLibrary、GetProcAddress和FreeLibrary是Windows C开发的重要技能。