一、创建动态库(vs2013)
可以建立一个空的c++项目,写好库里的函数;最后在编译时,生成动态库,我这里随便写了个函数
然后右键项目名,选择“属性”,“常规”,“配置类型”改成“动态库(.dll)”如图:
再点击生成即可生成动态库
二、调用动态库
1、创建一个函数指针,其指针数据类型要与调用的 DLL 引出函数相吻合,比如.typedef void(*fun)(int*,int);
2、定一个句柄实例,用来取DLL的实例地址。HINSTANCE hdll;
格式为hdll=LoadLibrary(“DLL地址”);这里字符串类型是LPSTR,当是unicode字符集的时候会不行,因此要在配置-属性-常规里面把默认字符集“unicode”改成支持多字符扩展即可。
3、取的地址要判断,返回的句柄是否为空,如果为无效句柄,那么要释放加载DLL所占用的内存。
FreeLibrary(hdll);
4、然后定义一个函数指针,用来获取你要用的函数地址,这个咋用呢?
先是定一个函数指针 fun FUN;然后通过GetProcAdress来获取函数的地址,这个函数参数是什么呢?
参数是DLL的句柄和你要调用的函数名:比如:FUN=(fun)GetProcAdress(hdll,”sum”);
这里也要判断要函数指针是否为空,如果没取到要求的函数,那么要释放句柄
FreeLibrary(hdll);
5、然后通过函数指针来调用函数。
FUN(int *p,int count);这里不能用函数名来使用函数,因为这个DLL本身不是当前CPP的一部分,而是通过windows去调用.没有在这个工程里声明或者定义,而是暴露出一个头,要指针获取他的地址,通过指针来调用.
最后调用结束后,就释放句柄
FreeLibrary(hdll);
如图:
编译即可
注意:
请注意此代码方法声明中的 __declspec(dllexport) 修饰符。这些修饰符使 DLL 能够导出该方法以供其他应用程序使用