环境:
VC++2008 Win7 32bit
使用动态链接库具有以下优点:(1)隐藏源代码;(2)实现代码重用;(3)当程序调用DLL中的函数时不需要重新编译,提高编译速度;(4)当多个程序调用同一DLL中函数时,内存中只有一个副本,节省内存空间。
调用Dll时有2种方式:
运行时动态链接:(显示链接)
应用程序调用LoadLibrary函数或LoadLibraryEx函数以在运行时加载DLL。成功加载DLL后,可以使用GetProcAddress函数获得要调用的导出的DLL函数的地址。在使用运行时动态链接时,无需使用导入库文件。
加载时动态链接:(隐式链接)
需要.dll .lib .h分别放在程序目录下
a.工程比较小时,可将DLL,H和LIB文件直接复制到当前工程下,不需要添加环境变量。这时在包含对应头文件时应当使用双引号而不是尖括号。
b.工程比较大,则可以在本地硬盘的其它位置新建一个文件夹,命名为myDllTest,再新建三个子文件夹bin,include和lib,将DLL文件放到bin中,H文件放到include中,LIB文件放到lib中。然后打开环境变量编辑器(在开始里面直接输入编辑系统环境变量,然后搜索即可)。新建环境变量myLibTest,变量值为myDllTest文件夹所在目录。然后编辑Path环境变量,添加语句%myDllTest%\bin;(不同的语句用;间隔)。
可以根据下面的 准则来判断使用哪一种链接方式。
(1)启动性能 如果应用程序的初始启动性能很重要,则应使用运行时动态链接。
(2)易用性 在加载时动态链接中,导出的 DLL 函数类似于本地函数。这使您可以方便地调用这些函数。
(3)应用程序逻辑在运行时动态链接中,应用程序可以分支,以便按照需要加载不同的模块。在开发多语言版本时,这一点很重要。
生成:加法函数
新建->项目->VC++->Win32控制台应用程序->应用类型:DLL 附加选项为空-> finlish
MyDll.h:
extern "C" _declspec(dllexport) int Sum(int a,int b);//加法函数
MyDll.cpp:
#include "MyDll.h" int Sum(int a,int b) { return a+b; }
单击编译后,及可生成DLL文件和Lib文件.
创建:
创建Win32工作台程序,进行隐式链接.
copy 三个文件安装目录.
测试代码如下:
#include "stdafx.h" #include "MyDll.h" #pragma comment(lib,"DllCreate.lib"); int _tmain(int argc, _TCHAR* argv[]) { int c=Sum(3,5); printf("a+b=%d",c); getchar(); return 0; }
测试通过