C++调用DLL函数有两种方式:1. 隐式链接需头文件、.lib和.dll,通过#pragma comment引入lib,直接调用函数;2. 显式链接使用LoadLibrary加载DLL,GetProcAddress获取函数地址,FreeLibrary释放,灵活性高,适合运行时动态加载。

在C++中调用DLL中的函数,主要有两种方式:隐式链接(通过.lib文件)和显式链接(使用LoadLibrary和GetProcAddress)。下面详细介绍这两种方法的使用场景和具体实现。
1. 隐式链接(Implicit Linking)
隐式链接是在程序启动时自动加载DLL,并将导出函数与程序链接。你需要以下三个文件:
- DLL 文件(.dll)
- 导入库文件(.lib)
- 头文件(.h),声明DLL中导出的函数
步骤如下:
- 在项目中包含DLL的头文件
- 将.lib文件添加到项目依赖项(可以在代码中用#pragma comment(lib, "xxx.lib"))
- 直接像调用普通函数一样使用DLL中的函数
示例代码:
立即学习“C++免费学习笔记(深入)”;
#include "MyDll.h" // 声明了 int Add(int a, int b);
#pragma comment(lib, "MyDll.lib")
int main() {
int result = Add(3, 4);
return 0;
}
注意:运行时必须确保MyDll.dll在可执行文件目录或系统路径中。
2. 显式链接(Explicit Linking)
显式链接使用Windows API动态加载DLL,适合在运行时决定是否加载DLL,或者处理DLL可能不存在的情况。
关键API:
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
- LoadLibrary:加载DLL
- GetProcAddress:获取函数地址
- FreeLibrary:释放DLL
示例代码:
立即学习“C++免费学习笔记(深入)”;
#include#include typedef int (*AddFunc)(int, int); int main() { HMODULE hDll = LoadLibrary(L"MyDll.dll"); if (!hDll) { std::cout << "无法加载DLL" << std::endl; return -1; } AddFunc add = (AddFunc)GetProcAddress(hDll, "Add"); if (!add) { std::cout << "无法找到函数Add" << std::endl; FreeLibrary(hDll); return -1; } int result = add(3, 4); std::cout << "结果:" << result << std::endl; FreeLibrary(hDll); return 0; }
这种方式更灵活,可以处理加载失败,也支持按需加载。
3. DLL函数导出注意事项
确保DLL正确导出函数,通常在DLL源码中使用__declspec(dllexport):
// 在DLL中
extern "C" __declspec(dllexport) int Add(int a, int b) {
return a + b;
}
使用extern "C"防止C++名称修饰,便于在显式链接中通过函数名查找。
基本上就这些。根据项目需求选择合适的方式:隐式链接简单直接,显式链接更灵活可控。只要头文件、lib、dll三者齐全,或正确使用动态加载API,调用DLL函数并不复杂但容易忽略细节。









