Date 20200212 By WJB
昨天在写代码时,需要动态加载一个dll动态库,在网上找方法,很快就找到了。代码很简单只有几行,但是尝试了很久才成功,主要是在获取接口时,方法名称这个参数理解错误。
测试过程:
1,首先创建一个动态库。接口如下:
extern "C" __declspec(dllexport) int myfunc(int a)
{
return a;
}
(extern "C" 用法请自行查询)
2,dll加载代码
//定义函数指针
typedef int (*MYINTERFACE)(int);
//加载动态库
HMODULE hDLL = LoadLibraryA("MyDll.dll");
// 获取接口
// 说明 GetProcAddress 方法参数,第一个是句柄没有歧义,第二个参数是接口方法的名称 要与动态库中的定义一致,
//我开始理解为 为接口定义名字,因此名称与动态库中方法名称不一致,所以获取接口失败
MYINTERFACE func1 = (MYINTERFACE)GetProcAddress(hDLL, "myfunc");
//接口调用
int a = func1(2);
// 结果:a=2
说明:如果在LoadLibraryA 是动态库加载失败,则考虑下该动态库是否有依赖库。
我把实例代码上传了,地址:https://download.csdn.net/download/wangjianbo09/12152082