visual c++ 动态链接库调用总结

from  http://blog.youkuaiyun.com/hjkhjk007/article/details/9674773

    由于每次使用动态链接库的时候都要重新去查资料,查调用方式,有些烦躁,本人抽点时间在此做个总结,希望可以对需要的朋友有所帮助。
1,显式加载方式加载动态链接库


简单易懂,随掉随用


(1)          将dll考到当前工作目录,或者使用GetModuleFileName函数获取当前执行目录得到相对路径,亦或者使用绝对路径进行加载。


(2)          得到dll实例句柄


HMODULE LoadLibrary( LPCTSTR lpFileName )


( 3 ) 获取dll中导出函数的地址


FARPROC GetProcAddress( HMODULE hModule,LPCSTR lpProcName )


Ex:typedef int (*ADDPROC)( int a, int b )


ADDPROC Add=(ADDPROC)GetProcAddress(hinst,”add”);


(4)FreeLibrary()调用结束释放实例。


2         隐式加载方式加载动态链接库


一:基本调用流程


(1)      使用_declspec(dllexport)导出函数


比如


_declspec(dllexport) int add( int a,  int b  )


添_stdcall extern c可有效解决名字改编问题


_stdcall extern c _declspec(dllexport) int add( int a,  int b  )


 


(2)  将dll文件考到当前工程,并连接lib文件


Vc6可以通过link连接,vs系列可以通过依赖库连接


或者使用一种通用的方式加载,通过路径加载


#pragma comment(lib,"../SDK/Sadp.lib")


(3)在调用处用extern做外部定义声明


    Ex:extern int add( int a , int b )


   或者_declspec(dllimport) int add( int a,  int b  )


二:模块定义文件(可有效解决名字改编问题)参考网络通信库


Library xxx.dll


EXPORTS


Add。。。。


3         显式加载和隐式加载的比较


个人比较崇尚显示加载两个原因:


1,        随掉随用,易懂,并且不会因为某一个导出函数的调用的失败导致程序的崩溃


2,        节省内存,调用结束直接释放实例,而隐式加载从程序开始运行就一直伴随着程序的整个过程,当dll比较多的时候很浪费内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值