windowsapi编程之动态链接库(dll)
- 格式:doc
- 大小:14.03 KB
- 文档页数:4
Windows动态链接库DLL使⽤⼀、概念DLL:Dynamic Link Library,即动态链接库,这种库包含了可由多个程序同时使⽤的代码和数据。
它是microsoft在windows操作系统中实现共享函数库概念的⼀种实现⽅式。
其中windows中⼀些作为DLL实现的⽂件有:ActiveX控件(.ocx)⽂件:如windows上的⽇历控件。
控制⾯板(.cpl)⽂件:控制⾯板中的每⼀项都是⼀个专⽤的DLL。
设备驱动程序(.drv)⽂件:如控制打印到打印机的打印机驱动程序。
⼆、由来DLL最初⽤于节约应⽤程序所需要的磁盘和内存空间。
早前,在传统的⾮共享库中,⼀部分代码简单地附加到调⽤的程序中。
如果两个程序同时调⽤同⼀个⼦程序,就会出现两份那段代码。
相反,许多应⽤共享的代码能够切分到⼀个DLL中,在硬盘上存为⼀个⽂档,在内存中只需使⽤⼀个实例。
三、DLL的优缺点优点:(1)节省内存和代码重⽤:当多个程序使⽤同⼀个函数库时,DLL可以减少在磁盘和物理内存中加载代码的重复量,且有助于代码的重⽤。
(2)模块化:DLL有助于促进模块式程序开发。
模块化允许仅仅更改⼏个应⽤程序共享使⽤的⼀个DLL中的代码和数据⽽不需要更改应⽤程序⾃⾝。
这种模块话的基本形式允许如Microsoft Office、Microsoft Visual Studio、甚⾄windows⾃⾝这样⼤的应⽤程序使⽤较为紧凑的补丁和服务包。
缺点:DLL Hell:即DLL地狱,指⼏个应⽤程序在使⽤同⼀个共享的DLL库时发⽣版本冲突。
究其原因,⼋个字:成也共⽤,败也共⽤。
因为DLL Hell正是由于动态链接库可与其他程序共⽤函数、资源所导致。
主要有两种情况:设想这样⼀个场景:程序A会使⽤1.0版本的动态链接库X,则在程序A安装到系统时,会同时安装该1.0版本的动态链接库X。
假设另⼀个程序B也会使⽤到动态链接库X,那么程序B直接复制到硬盘中即可正常运⾏,因为动态链接库已经存在于系统中。
Windows Dynamic-Link Library1.概论先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。
在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。
静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。
但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。
静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。
对动态链接库,我们还需建立如下概念:(1)DLL 的编制与具体的编程语言及编译器无关只要遵循约定的DLL接口规范和调用方式,用各种语言编写的DLL都可以相互调用。
譬如Windows提供的系统DLL(其中包括了Windows的API),在任何开发环境中都能被调用,不在乎其是Visual Basic、Visual C++还是Delphi。
(2)动态链接库随处可见我们在Windows目录下的system32文件夹中会看到kernel32.dll、user32.dll和gdi32.dll,windows的大多数API都包含在这些DLL 中。
kernel32.dll中的函数主要处理内存管理和进程调度;user32.dll中的函数主要控制用户界面;gdi32.dll中的函数则负责图形方面的操作。
一般的程序员都用过类似MessageBox的函数,其实它就包含在user32.dll这个动态链接库中。
由此可见DLL对我们来说其实并不陌生。
(3)VC动态链接库的分类Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL (MFC扩展DLL)。
dll原理DLL原理动态链接库(Dynamic Link Library,简称DLL)是一种Windows 操作系统中常用的库文件,它可以被多个应用程序共享使用,从而避免了重复编写相同的代码。
本文将详细介绍DLL的原理。
一、静态链接与动态链接在介绍DLL原理之前,先来了解一下静态链接和动态链接。
1. 静态链接静态链接是指将程序所需要的库文件在编译时全部打包进可执行文件中。
这样做的好处是程序运行时不需要再加载外部库文件,因此速度较快。
但缺点也很明显,即可执行文件体积较大,在多个程序中使用相同的库时会造成重复浪费。
2. 动态链接动态链接是指在程序运行时才加载所需的库文件。
这样做的好处是节省了内存空间,并且多个程序可以共享同一个库文件。
但缺点也很明显,即运行速度较慢。
二、DLL概述1. DLL定义DLL是一个包含可由多个程序同时使用的代码和数据的库文件。
它可以被多个应用程序共享使用,从而避免了重复编写相同的代码。
2. DLL分类根据DLL所包含函数是否可以被其他应用程序调用,DLL可以分为两种类型:(1)导出函数的DLL导出函数的DLL是指将其中一些函数导出,以便其他应用程序可以调用这些函数。
这种DLL文件通常包含一组API(Application Programming Interface,应用程序编程接口)函数。
(2)内部使用的DLL内部使用的DLL是指不导出任何函数,只供当前进程中的其他模块使用。
这种DLL文件通常包含一些共享数据和实现某些功能的代码。
三、DLL加载过程1. 加载方式当一个应用程序需要调用一个DLL中的函数时,Windows操作系统会自动加载该DLL。
Windows操作系统有两种加载方式:(1)显式链接显式链接是指在编译时就将要使用的DLL文件名和需要调用的函数名写入源代码中,并在程序运行时由操作系统自动加载该DLL文件。
(2)隐式链接隐式链接是指在编译时不将要使用的DLL文件名和需要调用的函数名写入源代码中,而是在程序运行时由操作系统自动搜索并加载相应的DLL文件。
dll的创建和使用使用C++语言创建dll并使用该dll的演示、说明Dll的创建和使用第一部分创建C风格的dll (4)步骤1:创建dll工程 (4)步骤2:文件改名 (5)步骤3:拷贝文件内容 (6)步骤4:从工程中删掉文件main.cpp,main.h (7)步骤5:继续修改文件mydll.h和mydll.cpp (7)步骤6:编译并生成dll文件 (8)第二部分以间接调用的方式使用.dll (10)步骤1:新建一个控制台工程(UseDll.cbp). (10)步骤2:修改main.cpp。
(11)步骤3:编译,生成UseDll.exe (12)步骤4:拷贝mydll.dll到UseDll.exe所在目录 (13)步骤5:执行UseDll.exe,输出: (13)间接调用Dll的好处 (14)第三部分以直接调用的方式使用.dll (15)步骤1:改写main.cpp (15)步骤2:添加mydll.dll的静态导出库到UseDll工程中 (16)步骤3:编译并执行,输出 (17)直接调用的好处 (18)Dll的优势 (18)调用约定的说明 (18)第四部分创建C++风格的dll(本地方法) (19)步骤1:在mydll.h中新增导出的类 (19)步骤2:在mydll.cpp中实现Cat类 (19)步骤3:编译MyDll,生成mydll.dll,mydll.a (21)第五部分使用本地风格的C++ DLL (22)步骤1:修改UseDll中的main.cpp (22)步骤2:将mydll.a添加到UseDll工程的BuildOptions中 (23)步骤3:编译UseDll工程,生成UseDll.exe (23)步骤4:将MyDll.dll拷贝到UseDll.exe目录下 (23)步骤5:执行UseDll.exe,输出 (23)本地风格的不足 (24)第六部分创建推荐风格的C++ DLL (26)步骤1:修改mydll.h,创建Cat的接口类ICat (26)步骤2:新建类Cat (27)步骤3:实现createCat函数 (29)步骤4:编译,生成mydll.dll (31)第七部分使用推荐风格的C++ DLL (32)步骤1:修改UseDll中的main.cpp (32)步骤2:将第六部分生成的libmydll.a添加到UseDll的BuildOptions中 (33)步骤3:编译UseDll工程,生成useDll.exe (34)步骤4:将第六部分生成的mydll.dll拷贝到UseDll.exe所在文件目录 (34)步骤5:执行,输出 (35)推荐风格的好处: (35)第一部分创建C风格的dll下面以CodeBlocks为例演示说明创建和使用dll,其它开发环境类似步骤1:创建dll工程创建dll工程MyDll.cpp步骤2:文件改名新建两个文件mydll.h和mydll.cpp步骤3:拷贝文件内容将main.h中的核心内容拷贝到mydll.h中再将main.cpp中的部分内容拷贝到mydll.cpp中,并更改include文件名。
Windows系统平台提供了一种有效的编程和运行环境,可以把独立的程序模块创建成为较小的DLL(Dynamic Linkable Library,动态链接库)文件,并可对它们单独编译和测试. Windows操作系统的核心功能、系统服务、应用程序服务等多数是由一组动态链接库是实现的。
使用动态链接库有很多优点,在运行时,只有当EXE程序确实要调用这些DLL 模块的情况下,系统才会将它们装载到内存空间中,这种方式不仅减少了EXE 文件的大小和对内存空间的需求,而且使这些DLL模块可以同时被多个应用程序使用。
而且当动态链接库中的函数改变后,只要不是参数改变,调用这个函数的应用程序并不需要重新编译,这在编程时是十分有用的。
通过本章的学习,读者会了解DLL的基本概念、能够使用VC实现几种类型的DLL的开发与调用操作。
DLL的基本知识在程序开发中,比较大的应用程序,往往被划分为很多模块,这些模块以二进制的方式提供,并能完成相对独立的功能。
其中一些比较通用的模块,在构造其他软件系统时,也经常用到,就把这些模块汇集起来,形成“仓库”。
而动态链接库(DLL)就可以看成一种“仓库”,提供可以直接使用的变量、函数或类。
在开发和调用DLL之前,有必要了解一下动态链接库的相关概念。
只有了解了动态链接库的结构和共走机制,才能灵活有效地开发和使用它。
1.1DLL与LIB•与动态链接库(DLL)相对应的是静态链接库(LIB文件),其相似之处是它们都是将一部分可执行代码以及数据放在库中供用户程序使用,而且在使用时,这些代码就像是用户程序本身的一部分。
而二者的主要区别就是在使用方法上。
使用静态链接库的应用程序从函数库(LIB)得到所引用的函数的执行代码,然后把执行代码放进自身的执行文件中,这样,应用程序在运行时就可以不再需要静态函数库的支持。
•使用动态链接库的应用程序只包括了用于从DLL中定位所引用的函数的信息。
而没有函数具体的实现,要等到程序运行时才从DLL中获得函数的实现代码。
主题:DLL是Windows最重要的组成要素,Windows中的许多新功能、新特性都是通过DLL来实现的,因此掌握它、应用它是非常重要的。
动态链接库不仅可以作为一个运行模块,包括函数代码,而且可以包含程序以外的任何数据或资源(位图、图标等等)。
动态链接库就是给应用程序提供函数或者资源。
DLL是一种磁盘文件(通常带有DLL扩展名),它由全局数据、服务函数和资源组成,在运行时被系统加载到进程的虚拟空间中,成为调用进程的一部分。
在运行时,只有当EXE 程序确实要调用这些DLL模块的情况下,系统才会将它们装载到内存空间中。
每个进程都复制了自己的读/写全局变量。
如果想要与其它进程共享内存,必须使用内存映射文件或者声明一个共享数据段。
DLL模块需要的堆栈内存都是从运行进程的堆栈中分配出来的。
DLL文件中包含一个导出函数表。
这些导出函数由它们的符号名和称为标识号的整数与外界联系起来。
导入导出函数:在DLL代码中,必须像下面这样明确声明导出函数:__declspec(dllexport) int MyFunction(int n);但也可以在模块定义(DEF)文件中列出导出函数,不过这样做常常引起更多的麻烦。
在应用程序方面,要求像下面这样明确声明相应的输入函数:__declspec(dllimport) int MyFuncition(int n); (这是隐式链接dll)仅有导入和导出声明并不能使应用程序内部的函数调用链接到相应的DLL文件上。
应用程序的项目必须为链接程序指定所需的输入库(LIB文件)。
而且应用程序事实上必须至少包含一个对DLL 函数的调用。
隐式链接和显式链接dll显式:typedef double(SQRTPROC)(double);HINSTANCE hInstance; //设置全局变量用于存储DLL句柄SQRTPROC* pFunction; 第二个变量ShowMe是指向DLL,库中函数的指针VERIFY(hInstance=::LoadLibrary("c://winnt//system32//mydll.dll"));VERIFY(pFunction=(SQRTPROC*)::GetProcAddress(hInstance,"SquareRoot"));double d=(*pFunction)(81.0);//调用该DLL函数隐式:程序员通过静态链接方式编译生成应用程序时,应用程序中的调用函数与LIB文件中导出符号相匹配,这些符号或标识号进入到生成的EXE文件中.隐式链接和显式链接dll的区别:在隐式链接方式中,所有被应用程序调用的DLL文件都会在应用程序EXE文件加载时被加载在到内存中;但如果采用显式链接方式,程序员可以决定DLL文件何时加载或不加载。
动态链接库(DLL)动态链接库和静态链接库:动态链接库⼀般不能直接执⾏,⽽且它们⼀般也不接收消息。
它们是包含许多函数的独⽴⽂件,这些函数可以被应⽤程序和其他 DLL 调⽤以完成某些特定的⼯作。
⼀个动态链接库只有在另外⼀个模块调⽤其所包含的函数时才被启动。
“静态链接” ⼀般是在程序开发过程中发⽣的,⽤于把⼀些⽂件链接在⼀起创建⼀个 Windows 可执⾏⽂件。
这些⽂件包括各种各样的对象模块(.OBJ),运⾏时库⽂件(.LIB),通常还有已编译的资源⽂件(.RES)。
与其相反,动态链接则发⽣在程序运⾏时。
静态库:函数和数据被编译进⼀个⼆进制⽂件,扩展名为(.lib)。
在使⽤静态库的情况下,在编译链接可执⾏⽂件时:链接器从静态库中复制这些函数和数据,并把它们和应⽤程序的其他模块组合起来创建最终的可执⾏⽂件(.exe)。
当发布产品时,只需要发布这个可执⾏⽂件,并不需要发布被使⽤的静态库。
“动态链接” 是指 Windows 的链接过程,在这个过程中它把模块中的函数调⽤与在库模块中的实际函数链接在⼀起。
动态库:在使⽤动态库时,往往提供两个⽂件:⼀个导⼊库(.lib,⾮必须) 和⼀个(.dll)⽂件。
导⼊库和静态库本质上的区别:静态库本⾝就包含了实际执⾏代码和地址符号表等数据。
⽽对于导⼊库⽽⾔,其实际的执⾏代码位于动态库中,导⼊库只包含了地址符号表等,确保程序找到对应函数的⼀些基本地址信息。
动态链接库的标准扩展名是(.dll)。
只有扩展名为(.dll)的动态链接库才能被 Windows 操作系统⾃动加载。
如果该⽂件有另外的扩展名,则程序必须明确地⽤ LoadLibrary() 或 LoadLibraryEx() 加载相应模块。
编写动态链接库我们编写的程序都可以根据 UNICODE 标识符的定义编译成能够处理 UNICODE 或者⾮ UNICODE 字符串的程序。
在创建⼀个 DLL 时,对于任何有字符或者字符串参数的函数,它都应该包括 UNICODE 和⾮ UNICODE 两个版本。
动态链接库(DLL)编写经验我⾸先说明DLL的⽣成⽅法,之后再补充⼀些特殊之处。
⽣成⽅法:1.对需要导出的类,在头⽂件中添加#ifdef CLASS _API#define CLASS_API _declspec(dllexport )#else#define CLASS_API _declspec(dllimport )#endif2.在其cpp⽂件中添加#define CLASS_API _declspec(dllexport )注意这条语句⼀定要放在头⽂件链接的前⾯3.在类声明添加 CLASS_API,如:class CLASS_API Class1添加完以上编译命令后运⾏得到的⽂件在debug⽂件夹中,但注意有⽤的是后缀名为dll与lib的两个⽂件,以及类的头⽂件。
将这三个⽂件拷贝在需要使⽤该动态链接库的⽬录下。
然后在解决⽅案中添加lib⽂件和头⽂件,dll⽂件只需要拷贝在⼯程⽬录下⽽并不需要添加在解决⽅案中。
然后直接调⽤就可以。
再补充说明⼀些特殊的地⽅:1.⼀个动态链接库可以同时导出多个类,但注意每个类都要按照以上的⽣成⽅法处理。
当然在使⽤时每个类的头⽂件也都要拷贝在⼯程⽬录之下;2.根据实验dll⽂件的⽣成必须在win32控制台应⽤程序的DLL项⽬中,单纯的控制台应⽤程序即使添加了上述代码也不能⽣成dll⽂件,只是多⽣成了lib⽂件。
⽽没有dll⽂件是⽆法运⾏3.⼀旦选择了dll链接库项⽬,⾄于类声明是_declspec (dllexport )还是_declspec (dllimport ),似乎并没有影响,运⾏结果⼀致且都成功。
按理说类声明在编写时应该为_declspec (dllexport ) 。
但可能是项⽬本⾝的编译设置忽略的这点差异,只要类是声明为dll相关的都会导出到dll⽂件中。
当然如果两个声明语句都没有⾃然是⽆法导出的。
4.在多个类嵌套的情况下要特别注意最终导出的类的封装。
动态链接库(dll)简介DLL 是Dynamic Link Library 的缩写,译为“动态链接库”。
DLL也是一个被编译过的二进制程序,可以被其他程序调用,但与exe 不同,DLL不能独立运行,必须由其他程序调用载入内存。
DLL 中封装了很多函数,只要知道函数的入口地址,就可以被其他程序调用。
Windows API中所有的函数都包含在DLL中,其中有3个最重要的DLL:•Kemel32.dll:它包含那些用于管理内存、进程和线程的函数,例如CreateThread函数;•User32.dll:它包含那些用于执行用户界面任务(如窗口的创建和消息的传送)的函数,例如 CreateWindow 函数;•GDI32.dll:它包含那些用于画图和显示文本的函数。
静态链接库和动态链接库1) 静态库函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。
在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其他模块组合起来创建最终的可执行文件(.EXE文件)。
当发布产品时,只需要发布这个可执行文件,并不需要发布被使用的静态库。
2) 动态库在使用动态库的时候,往往提供两个文件:一个引入库(.lib)文件和一个DLL (.dll) 文件。
虽然引入库的后缀名也是“lib”,但是,动态库的引入库文件和静态库文件有着本质上的区别,对一个DLL来说,其引入库文件(.lib)包含该DLL导出的函数和变量的符号名,而.dll文件包含该DLL实际的函数和数据。
在使用动态库的情况下,在编译链接可执行文件时,只需要链接该DLL的引入库文件,该DLL中的函数代码和数据并不复制到可执行文件中,直到可执行程序运行时,才去加载所需的DLL,将该DLL映射到进程的地址空间中,然后访问DLL 中导出的函数。
这时,在发布产品时,除了发布可执行文件以外,同时还要发布该程序将要调用的动态链接库。
使用动态链接库的好处1) 可以采用多种编程语言来编写我们可以采用自己熟悉的开发语言编写DLL,然后由其他语言编写的可执行程序来调用这些DLL。
动态链接库和静态库的创建及使用教程第一部分静态库(以vs2005为例)一、创建新的静态库项目1.从“文件”菜单中,选择“新建”,然后选择“项目…”。
2.从“项目类型”窗格中,选择“Visual C++”下的“Win32”。
3.从“模板”窗格中,选择“Win32 控制台应用程序”。
4.为项目选择一个名称,如“MathFuncsLib”,并将其输入“名称”字段。
为解决方案选择一个名称,如“StaticLibrary”,并将其输入“解决方案名称”字段。
5.按“确定”启动Win32 应用程序向导。
在“Win32 应用程序向导”对话框的“概述”页中,按“下一步”。
6.从“Win32 应用程序向导”的“应用程序设置”页中,选择“应用程序类型”下的“静态库”。
7.从“Win32 应用程序向导”的“应用程序设置”页中,取消选择“附加选项”下的“预编译头”。
8.按“完成”创建项目。
向静态库添加类1.若要为新类创建头文件,请从“项目”菜单中选择“添加新项…”。
将显示“添加新项”对话框。
从“类别”窗格中,选择“Visual C++”下的“代码”。
从“模板”窗格中选择“头文件(.h)”。
为头文件选择一个名称,如“MathFuncsLib.h”,并按“添加”。
将显示一个空白文件。
2.添加一个名为“MyMathFuncs”的简单类,以执行常见的算术运算,如加、减、乘和除。
代码应与以下内容类似:// MathFuncsLib.hnamespace MathFuncs{class MyMathFuncs{public:// Returns a + bstatic double Add(double a, double b);// Returns a - bstatic double Subtract(double a, double b);// Returns a * bstatic double Multiply(double a, double b);// Returns a / b// Throws DivideByZeroException if b is 0static double Divide(double a, double b);};}3.若要为新类创建源文件,请从“项目”菜单中选择“添加新项…”。
Windows API编程之动态链接库(DLL)
本文总结Windows API编程之动态链接库(DLL),内容涉及DLL的制作、发布、使用及相关技术以供大家参考。
作者:tyc611,2007-05-26 链接库分为静态链接库和动态链接库,而动态链接库在使用时,又进一步分为装载时链接和运行时链接。
装载时链接是指该动态链接库是在程序装入时进行加载链接的,而运行时链接是指该动态链接库是在程序运行时执行LoadLibrary(或LoadLibraryEx,下同)函数动态加载的。
因此,由于动态链接库有这两种链接方式,所以在编写使用DLL的程序时,就有了两种可选方案。
可能有人会问“为什么需要装载时链接?直接静态链接
不就行了吗?”,这是模块化程序设计的需要。
试想,如果你开发一个很大的程序,并且经常需要更新。
如果你选择静态链接,那么每次更新就必须更新整个exe文件,而如果你把需要经常更新的模块做成dll,那么只需要更新这个文件即可,每次程序运行时加载这个更新的文件即可。
在进入编写DLL程序之前,先介绍一些相关知识。
VC支持三种DLL,它们分别是Non-MFC DLL、MFC Regular DLL、MFC Extension DLL。
由于本文只讲解API
编程,所以这里只对第一种DLL进行介绍,后面两种DLL
将在另外的文章中介绍。
动态链接库的标准后缀是.DLL,当然也可以使用其它任意后缀名。
但使用.DLL后缀的好处是:一是,很直观表明该文件的性质;二是,只有后缀为.DLL的动态链接库才能被Windows自动地加载,而其它后缀的动态链接库只能通过LoadLibrary显示式加载。
动态链接库的用途:一是作为动态函数库使用,另一个常用的方式是作为动态资源库。
当然,没有绝对的划分,比如你的动态函数库时也可能有资源,但动态资源库一般不会有函数。
另两个重要的、需要区分的概念是:对象库(Object Library)和导入库(Import Library)。
对象库是指普通的库文件,比如C运行时库libc.lib;而导入库是一种比较特殊的对象库文件,与一个动态链接库相对应。
它们都有后缀.lib,并且都仅在程序编译链接时使用,被链接器用来解析函数调用。
然而,导入库不包含代码,它只为链接器提供动态链接库的信息,以便于链接器对动态链接库中的对象作恰当地链接。
动态链接库的查找规则。
如果在使用时没有指定动态链接库的路径,则Windows系统按如下顺序搜索该动态链接库:使用该动态链接库的.exe文件所在目录、当前目录、Windows系统目录、Windows目录、环境变量%PATH%中的路径下的目录。
DLL内的函数划分为两种类型:(1)导出函数,可供应用程序调用;(2)内部函数(普通函数),只能在DLL程序内使用,应用程序无法调用它们。
同样的划分适用于数据对象。
在DLL中,要导出某个对象(函数或者数据),声明方式有两种:一种是利用关键字__declspec(dllexport);另一种方式是采用模块定义文件(.def)。
另外,还可以通过链接选项/EXPORT指定导出。
应该优先选用第一种方式,但.def
文件方式在某些情况下是必须的。
下面,我们分别介绍动态链接库的的制作、发布、使用及相关技术,重点介绍装载时链接和运行时链接的使用方法。
在介绍运行时链接时,引入了模块定义文件(.def),详细介绍了其在DLL制作过程中的作用及使用方法。
另外,还介绍了DLL中全局变量的导出、DLL中的数据共享和资源DLL
的制作及使用。
动态链接库的制作及装载时链接
首先,打开VC6.0,创建一个名为DLLTest的空工作区。
然后,创建一个名为DLL_Lib的Win32 Dynamic-Link Library工程,注意将该工程添加到刚创建的工作区DLLTest 中,并且将该工程保存在工作区的目录下(不建子目录)。
然后,在该工程中,加入这下面两个文件:/*
* dll_lib.h
*/
#ifndef DLL_LIB_H
#define DLL_LIB_H#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endifEXPORT int WINAPI GetMax(int a, int b);#endif。