调用动态链接库
动态链接库可以有两种加载方式,分别为静态加载和动态加载。下面以动态加载为例来介绍动态链接库函数的调用。
例如,调用动态链接库
(1)创建一个基础对话框的工程。工程名称为“InvokeDll”。
(2)定义一个函数指针类型,其定义与动态链接库中的函数原型相同。
typedef void (__stdcall * funShowInfo)(char* pchData);
注意:动态链接库中函数的调用约定通常为__stdcall。为了能够利用函数指针调用动态链接库中的函数。我们在定义函数指针类型时,也要指定__stdcall调用约定。
(3)处理按钮的单击事件,加载动态链接库。
void CInvokeDllDlg::OnOK()
{
HMODULE hMod = LoadLibrary("ShowDlg.dll"); //加载动态链接库
if (hMod != NULL) //判断加载是否成功
{
funShowInfo ShowInfo; //定义函数指针
ShowInfo = (funShowInfo)GetProcAddress(hMod,"ShowDialog"); //获取动态链接库中的函数
if (ShowInfo) //判断函数指针是否为空
ShowInfo("编程词典"); //调用动态链接库中的hanshu
}
FreeLibrary(hMod); //卸载动态链接库
}
(4)运行程序,效果如图1所示。
.jpg)
图1 对话框
动态加载动态链接库是通过使用LoadLibray函数实现的。下面介绍一下静态加载动态链接库的方法。隐式加载动态链接库通常需要提供3个文件,分别为动态链接库文件、动态链接库的头文件和lib文件(编译动态链接库时生成的文件)。首先将动态链接库的头文件加载到当前的工程中,然后使用“#pragma comment (lib,"ShowDlg.lib")”语句链接lib文件,最后就可以直接访问动态链接库头文件中的函数了。