中关村在线

软件

动态库的动态加载机制

动态加载动态链接库通过LoadLibrary()和GetProcAddress()两个API实现,前者负责加载库文件,后者用于获取库中指定函数的内存地址,从而实现运行时函数调用。

1、 LoadLibrary函数仅含一个参数,用于指定需加载的动态链接库文件。

2、 GetProcAddress函数声明包含两个参数:其一为LoadLibrary所返回的模块句柄,其二为需获取函数的名称。

3、 以user32.dll中的MessageBox函数为例,在VS2017中创建项目。依次点击文件→新建→项目,选择新建一个Win32控制台应用程序,完成初始设置后即可开始编码调用该函数实现消息框显示功能。

4、 常规调用MessageBox的方法如下,可直接使用。

5、 Visual Studio 2017代码示例

6、 }

7、 使用动态加载时,需先调用LoadLibrary函数载入user32.dll文件。

8、 定义一个函数指针类型,并以此类型声明一个函数指针,用于存储通过GetProcAddress()获取的MessageBox函数的地址。

9、 接着调用GetProcAddress()来获取对应函数的地址信息。

10、 利用函数指针直接调用MessageBox函数完成操作。

11、 以下为代码及其执行结果://附带API函数调用声明文件

12、 加载用户32动态链接库文件

13、 由于MessageBox()函数在user32.dll中提供,调用时需链接该动态链接库。

14、 加载成功后,获取MessageBox函数的内存地址。

15、 定义一个函数指针类型,用于指向消息框函数。

16、 通过 GetProcAddress 函数获取指定函数的地址。

17、 利用函数指针调用消息框函数显示提示信息

18、 }

19、 }

展开全文
人赞过该文
内容纠错

相关电商优惠

评论

更多评论
还没有人评论~ 快来抢沙发吧~

读过此文的还读过

点击加载更多

内容相关产品

说点什么吧~ 0

发评论,赚金豆

收藏 0 分享
首页查报价问答论坛下载手机笔记本游戏硬件数码影音家用电器办公打印 更多

更多频道

频道导航
辅助工具