加载DLL(动态链接库)的方式

【隐式导入】

l  即在程序指定链接的.lib(可以通在项目中设置,也可以通过代码指定);以及进行函数的前置声名(extern或者_declspec(dllimport)),注:可以通过在导出的头文件定义导出函数的前置声名。

l  通过.lib文件在可执行程序中生成DLL的重定位表(含DLL名称、导入的函数名表(存放导入的函数名,在生成可执行程序后就建立)、DLL中导出函数的地址映射表(此地址在进程空间初始化时,调用LoadLibary后,调用GetProcAddress函数获得的。))。

l  总结:采用这种方式编程时一般需要三个文件(导出头文件、.lib文件、DLL文件);程序发布时只需要带DLL文件。

l  优点:三方开发时可以根据头文件得出导出的函数以及详细的说明。

l  缺点:程序启动后即加了导入函数,但此函数可能一直不被使用。这种情况在导入库非常多时会造成内存资源的浪费。

 

【显示导入】

l  在程序运行中需要时导入,而不是隐式导入时在程序启动时导入所有需要的函数。

l  LoadLibrary导入DLL;GetProcAddress获得函数地址;FreeLibrary释放DLL。

l  总结:采用这种方式编程时只需要一个DLL文件即可。

l  优点:需要时才导入,不会浪费内存资源。

l  缺点:三方开发时,对方必须利用查询DLL中的导入库工具来分析导出函数(如:dumpbin或depends)。这样造成对导出库了解不一致情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值