**dll作为程序一个部分,可以理解为系统中的模块,被嵌入调用以完成某一特定功能。
.dll文件:描述的是函数接口,以及具体的函数接口入口地址信息
.lib文件:是对dll的资源描述文件**
如何调用dll文件?
方法一:借助vs2013编译器
1.将生成的dll资源(.h,.dll,.lib文件)拷贝至当前测试工程目录下,如:Debug文件夹的同一级目录。
2.添加.h文件到当前工程中
3.右键项目属性—链接器—输入—-附加依赖项,编辑信息,输入.lib,通过编译器载入.lib文件,如此就可以调用dll了。
例子:dll中的一个init函数接口如下
int init(void ** handle);
调用:
void main()
{
int res = 0;
void * p = NULL;
res = init(&p);//调用dll接口,函数原型一定要一样
//TODO:根据返回值做相应的判断
system("pause");
}
说明:dll中是函数的具体实现,lib文件引导当前程序找到具体的dll,dll中函数具体的实现代码被调用起来。
方法二:调用库函数方式,手动完成dll调用
LoadLibrary,GetProcAddress
//说明:自定义函数指针,接口原型是根据dll中定义的原型而来的,MyInit对应dll 中的init,MyFree对应dll中的free
typedef int (*MyInit)(void **handle /*out*/);
typedef int (*MyFree)(void *handle/*in*/);
void test()
{
void *handle = NULL;
HINSTANCE hInstance;
hInstance = LoadLibrary("c:/mydll.dll");
if (hInstance == NULL)
{
//TODO:
;
}
MyInit init= (MyInit)GetProcAddress(hInstance,"init");
if (init== NULL)
{
//TODO:
return ;
}
MyFree myfree= (MyFree)GetProcAddress(hInstance,"free");
if (myfree== NULL)
{
//TODO:
return ;
}
//调用
init(&handle);//调用之后,handle有内容了
free(handle);
}