c++调用动态库的方法

  • Post author:
  • Post category:其他


一、创建动态库(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 能够导出该方法以供其他应用程序使用



版权声明:本文为lileiyuyanqin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。