动态加载动态链接库通过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、 }
评论
更多评论