from http://blog.sina.com.cn/s/blog_890a68e101010k1f.html
调用原理:
将DLL文件映射到用户进程地址空间,然后就可进行函数调用,调用方法与进程内部一般函数的调用方法相同。Windodws提供两种将DLL映射到进程空间的方法,即隐式调用与显式调用。
隐式调用:
即通过LIB和头文件。该方法需要DLL工程经编译后产生的LIB文件,此文件包含DLL允许应用程序调用的所有函数列表。LINKER检测应用程序调用了LIB文件中的某个函数时,就会在应用程序EXE文件中加入相关信息。该应用程序运行时,系统会查看这个文件的DLL信息,后将DLL文件映射到地址空间。因为LIB文件并没有包含函数的具体实现,因此LIB文件相较于DLL文件和STATIC-LIB文件(静态链接库)会比较小
系统寻找DLL文件的路径先后顺序如下:
1. EXE文件所在目录 2. 当前程序工作目录 3. 系统目录 4. Windows目录 4. 环境变量中所有目录
VC中
加载DLL的LIB文件
的方法如下:
1. LIB文件直接加入到工程文件列表中 2. 设置Project Settings加载LIB文件 3. 预编译指令 #pragma comment (lib, "*.lib")
显示调用:
当只提供DLL文件而没有其相关的LIB文件和头文件的情况下,只能使用显示调用。显示调用能够更加有效的使用内存,编写大型程序时往往使用显示调用。
该方法使用Load Library或者AfxLoadLibrary对DLL进行动态加载;使用GetProcessAdress获得所调用函数的指针;使用完毕后以Free Library或者AfxFreeLibrary将DLL从地址空间中卸载。