字体
第(3/5)页
关灯
   存书签 书架管理 返回目录
.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 文件拷贝到工程所在的目

   
上一页 目录 下一页