设为首页 加入收藏

TOP

visual c++ 动态链接库调用总结
2014-11-23 21:54:14 来源: 作者: 【 】 浏览:15
Tags:visual 动态 链接 调用 总结

由于每次使用动态链接库的时候都要重新去查资料,查调用方式,有些烦躁,本人抽点时间在此做个总结,希望可以对需要的朋友有所帮助。
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比较多的时候很浪费内存。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇poj1066 下一篇HDU 4630、BOJ 某题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Linux 系统监控 的完 (2025-12-27 08:52:29)
·一口气总结,25 个 L (2025-12-27 08:52:27)
·【总结】100个最常用 (2025-12-27 08:52:22)
·有没有哪些高效的c++ (2025-12-27 08:20:57)
·Socket 编程时 Accep (2025-12-27 08:20:54)