.lib 即可。
10.3.2 显式链接
显式链接方式对于集成化的开发语言(例如Visual Basic)比较适合。有了显式链接,程
序员就不必再使用导入文件,而是直接调用Win32 的LoadLibary 函数,并指定DLL 的路径
作为参数。LoadLibary 返回HINSTANCE 参数,应用程序在调用GetProcAddress 函数时使用
这一参数。GetProcAddress 函数将符号名或标识号转换为DLL 内部的地址。假设有一个导出
如下函数的DLL 文件:
extern "C" __declspec(dllexport) double SquareRoot(double d);
在隐式链接方式中,所有被应用程序调用的DLL 文件都会在应用程序EXE 文件加载时
被加载在到内存中。但如果采用显式链接方式,程序员可以决定DLL 文件何时加载或不加载。
显式链接在运行时决定加载哪个DLL 文件。例如,可以将一个带有字符串资源的DLL 模块
以英语加载,而另一个以西班牙语加载。应用程序在用户选择了合适的语种后再加载与之对
应的DLL 文件。
在显式链接方式中,应用程序在执行过程中随时可以加载DLL 文件,也可以随时卸载
DLL 文件,这是隐式链接所无法作到的,所以显式链接具有更好的灵活xìng,更适合解释xìng语
言。不过实现显式链接比较复杂,除了要调用特定的Win32 的LoadLibrary 函数动态链接DLL,
在应用程序退出之前,还应该用FreeLibrary 或MFC 提供的AfxFreeLibrary 释放动态链接库。
下面是通过显式链接调用DLL 中的Max 函数的例子,代码如下:
#include …
void main(void)
{
typedef int(*pMax)(int a,int b);
typedef int(*pMin)(int a,int b);
HINSTANCE hDLL;
PMax Max;
HDLL=LoadLibrary("MyDll.dll");//加载动态链接库MyDll.dll 文件;
Max=(pMax)GetProcAddress(hDLL,"Max");
A=Max(5,8);
printf("比较的结果为%d\n",a);
FreeLibrary(hDLL);//卸载MyDll.dll 文件;
}
在上面的程序片断中使用类型定义关键字typedef,定义指向和DLL 中相同的函数原型
枫叶文学网www.fywxw.com
第10 章 动态链接库
·259·
指针,然后通过LoadLibray()将DLL 加载到当前的应用程序中并返回到当前DLL 文件的句
柄,然后通过GetProcAddress()函数获取导入到应用程序中的函数指针。函数调用完毕后,使
用FreeLibrary()卸载DLL 文件。在编译程序之前,首先要将DLL 文件拷贝到工程所在的目