用
该内存地址调用该函数。该方法的一切cāo作都是在应用程序运行时进行的。
当线程加载动态链接库的时候,是按照下面的搜索顺序查找并加载动态链接库文件的。
? 当前目录下(首先将动态链接库拷贝至DEBUG 目录下,因为可执行文件在该目录下)。
? Windows 目录。
? Windows 系统目录。
? PATH 环境变量中设置的目录。
? 列入映shè网络的目录表中的目录。
下面将介绍隐式链接和显式链接这两种调用DLL 的方式。
10.3.1 隐式链接
如果程序员采用隐式链接方式建立一个DLL 文件,链接程序会自动生成一个与之对应的
LIB 导入文件。该文件包含了每一个DLL 导出函数的符号名和可选的标识号,但是并不含有
实际的代码。LIB 文件作为DLL 的替代文件被编译到应用程序项目中。当程序员通过静态链
接方式编译生成应用程序时,应用程序中的调用函数与LIB 文件中导出符号相匹配,这些符
号或标识号进入生成的EXE 文件中。LIB 文件中也包含了对应的DLL 文件名(但不是完全
的路径名),链接程序将其存储在EXE 文件内部。当应用程序运行过程中需要加载DLL 文件
时,Windows 根据这些信息发现并加载DLL,然后通过符号名或标识号实现对DLL 函数的
动态链接。
下面的例子通过隐式链接调用MyDll.dll 库中的Min 函数。首先生成一个TestDll 项目,
在DllTest.h、DllTest.cpp 文件中分别输入如下代码:
//Dlltest.h
#pragma cocomnt(lib,"MyDll.lib")
extern "C"_declspec(dllimport) int Max(int a,int b);
extern "C"_declspec(dllimport) int Min(int a,int b);
//TestDll.cpp
#include"Dlltest.h"
void main()
{
int a;
a=min(8,10);
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·258·
printf("比较的结果为%d\n",a);
}
在创建DllTest.exe 文件之前,要先将MyDll.dll 和MyDll.lib 拷贝到当前工程所在的目
录下,也可以拷贝到windows 的System目录下。如果DLL 使用的是DEF 文件,要删除TestDll.h
文件中关键字extern "C"。TestDll.h 文件中的关键字Progam commit 是要Visual C++的编译器
在link 时,链接到MyDll.lib 文件。当然,开发人员也可以不使用#pragma cocomnt(lib,
"MyDll.lib")语句,而直接在工程的Setting→Link 页的Object/Moduls 栏填入MyDll