VC++ MFC DLL动态链接库编写详解

合集下载

动态链接库(DLL)编程深入浅出(3)精品文档11页

动态链接库(DLL)编程深入浅出(3)精品文档11页

第4节我们对非MFC DLL进行了介绍,这一节将详细地讲述MFC规则DLL的创建与使用技巧。

另外,自从本文开始连载后,收到了一些读者的e-mail。

有的读者提出了一些问题,笔者将在本文的最后一次连载中选取其中的典型问题进行解答。

由于时间的关系,对于读者朋友的来信,笔者暂时不能一一回复,还望海涵!由于笔者的水平有限,文中难免有错误和纰漏,也热诚欢迎读者朋友不吝指正!MFC规则DLL的概念体现在两方面:(1)它是MFC的“是MFC的”意味着可以在这种DLL的内部使用MFC;(2)它是规则的“是规则的”意味着它不同于MFC扩展DLL,在MFC规则DLL的内部虽然可以使用MFC,但是其与应用程序的接口不能是MFC。

而MFC扩展DLL与应用程序的接口可以是MFC,可以从MFC扩展DLL中导出一个MFC类的派生类。

Regular DLL能够被所有支持DLL技术的语言所编写的应用程序调用,当然也包括使用MFC的应用程序。

在这种动态连接库中,包含一个从CWinApp继承下来的类,DllMain 函数则由MFC自动提供。

Regular DLL分为两类:(1)静态链接到MFC 的规则DLL静态链接到MFC的规则DLL与MFC库(包括MFC扩展DLL)静态链接,将MFC 库的代码直接生成在.dll文件中。

在调用这种DLL的接口时,MFC使用DLL的资源。

因此,在静态链接到MFC 的规则DLL中不需要进行模块状态的切换。

使用这种方法生成的规则DLL其程序较大,也可能包含重复的代码。

(2)动态链接到MFC 的规则DLL动态链接到MFC 的规则DLL 可以和使用它的可执行文件同时动态链接到MFC DLL 和任何MFC扩展DLL。

在使用了MFC共享库的时候,默认情况下,MFC使用主应用程序的资源句柄来加载资源模板。

这样,当DLL和应用程序中存在相同ID的资源时(即所谓的资源重复问题),系统可能不能获得正确的资源。

因此,对于共享MFC DLL的规则DLL,我们必须进行模块切换以使得MFC能够找到正确的资源模板。

如何用VC编写DLL动态链接库文件

如何用VC编写DLL动态链接库文件

如何用VC编写DLL动态链接库文件作者: falcon 发表日期: 2006-04-24 14:51引言前不久刚学会了如何用VB编写DLL动态链接库,但是用vb编写动态链接库比较麻烦些。

下面我们再学习一下如何用vc编写dll动态链接库,并且通过vc或者vb调用正文这里主要介绍两个东东第一:用vc编写动态链接库,用vc调用第二:用vb编写动态链接库,用vb调用一、用vc编写动态链接库,用vc调用1、创建DLL文件,命名为FIRSTDLL1)打开visual c++ 6.0通过new创建一个win30 Dynamic-link Libary的工程,命名为FIRSTDLL2)接着选择最后一个选项,让系统帮我们创建一些必要的文件3)把FIRSTDLL.cpp用下面的代码覆盖Code:[Ctrl+A Select All]4)接着我们在FIRSTDLL.h头文件里头用下面的代码覆盖Code:[Ctrl+A Select All]5)好拉,我们现在可以编译FIRSTDLL.cpp文件拉,到debug目录下看看,是不是已经生成拉我们需要的FIRSTDLL.dll拉2、通过vb编写一个函数来调用该DLL,该函数为USEFIRSTDLL1)同样通过new创建一个工程,该工程为win30 application,命名USEFIRSTDLL2)在USEFIRSTDLL.cpp文件中用如下代码覆盖Code:[Ctrl+A Select All]好拉,到这里第一部分介绍完拉下面介绍第二部分二、用vc编写动态链接库,用vb调用在介绍这个之前必须声明的是(引用自下面的参考资料)一个DLL中的函数要想被VB调用,必须满足两个条件:一是调用方式为stdcall,另一个是必须是export的。

要做到第一条,只须在函数声明前加上__stdcall关键字。

如:short __stdcall sample(short nLen, short *buffer)要做到第二条,需要在*.def文件中加上如下的几行:EXPORTSsample @1这里的sample是你要在VB中调用的函数名,@1表示该函数在DLL中的编号,每个函数都不一样。

C语言创建动态dll和调用dll(visualstudio2013环境下)

C语言创建动态dll和调用dll(visualstudio2013环境下)

C语⾔创建动态dll和调⽤dll(visualstudio2013环境下)第⼀部分:创建动态dll库。

1、打开visual studio 创建⼀个控制台应⽤程序。

2、选择DLL,空项⽬。

3、点击源⽂件,创建⼀个main.c⽂件4、在main.c中写⼊⼀个简单的函数,内容如下:__declspec(dllexport)int mymax(int a,int b){return a + b;}5、编译⽣成。

6、在项⽬的⽬录有dll和lib两个⽣成好的⽂件。

第⼆部分:在新建项⽬中使⽤dll。

7、新建⼀个c的控制台应⽤程序UseDll,把Dll.dll放⼊Debug⽬录下。

8、把Dll.lib放⼊UserDll⽬录下。

9、在UseDll项⽬中新建⼀个源⽂件use.c,代码如下:#include<stdio.h>#pragma comment(lib,"Dll.lib")int mymax(int a,int b);int main(){printf("调⽤动态dll函数的结果:%d",mymax(5,6));getchar();return 0;}10、运⾏结果如下PS:vs2013调试程序时出现“计算机丢失.dll⽂件”在VS环境下能够编译成功,但是在运⾏.exe⽂件时,出现“计算机丢失xxx.dll⽂件”的提⽰的解决⽅式。

发⽣这种问题的根本原因在于环境变量的设置上,计算机只会在path下包含的⽬录⾥去寻找程序所要运⾏的.dll⽂件,若我们所要使⽤到的.dll⽂件没有包含在环境变量path中,则会发⽣错误:计算机丢失xxx.dll⽂件。

⼯具/原料1. VS2013或者其他版本2. VTK库或者其他库⽅法/步骤这⾥以丢失vtkIOPLY-7.0-gd.dll⽂件为例(主要是关于PCL1.8.0),找到VTK的安装⽬录下的bin⽂件夹(包含vtkIOPLY-7.0-gd.dll),我的bin⽂件夹是在C:\Program Files (x86)\PCL1.8.0\3rdParty\VTK\bin将上述⽬录添加到环境变量Path中,如下图所⽰重新开启项⽬,重新⽣成解决⽅案,则问题就会解决注意事项这⾥不仅仅是针对vtkIOPLY-7.0-gd.dll⽂件,任何丢失.dll⽂件都可以使⽤此⽅式解决以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

如何编写dll文件

如何编写dll文件
生成一个Dll工程,然后将你的类和函数都添加进去,然后将要输出的函数在该工程下的Translate.def文件中将名字列出(注意,只要名字,不要括号、参数等);实际上和你的Exe工程没有很大的区别。
如果你要用VB用,在Dll中定义你的函数的时候前面要加上“__stdcall”关键字,否则VB没有办法使用。
——(1)Windows的系统目录:\windows\system;
——(2)DOS中path所指出的任何目录;
——(3)程序所在的目录;
一.动态链接库(DLL)结构
——DLL中定义有两种函数:导出函数(export function)和内部函数
(internal function),导出函数可以被其他模块调用,内部函数只能在DLL内部使用。我们在用C++定制DLL文件时,需要编写的就是包含导出函数表的模块 定义文件(.DEF)和实现导出函数功能的C++文件。下面以Sample.dll为例介绍DEF文件和实现文件的结构:
MFC扩展DLL一般用来提供派生于MFC的可重用的类,以扩展已有的MFC类库的功能。MFC扩展DLL使用MFC的动态链接版本。只有使用MFC动态 链接的可执行程序(无论是EXE还是DLL)才能访问MFC扩展DLL。MFC扩展DLL的另一个有用的功能是它可以在应用程序和它所加载的MFC扩展 DLL之间传递MFC和MFC派生对象的指针。在其它情况下,这样做是可能导致问题的。
非MFC DLL
静态链接到MFC的常规DLL
动态链接到MFC的常规DLL
MFC扩展DLL
其中非MFC DLL(non-MFC DLL)内部不使用MFC,调用非MFC DLL提供的导出函数的可执行程序可以使用MFC,也可以不使用MFC。一般来说,非MFC DLL的导出函数都使用标准的C接口(standard C interface)。

CC++中动态链接库的创建和调用

CC++中动态链接库的创建和调用
3、在DllDemo.cpp文件中导入DllDemo.h文件,并实现Max(int,int)函数
以下是引用片段: #include "DllDemo.h" DllAPI int __stdcall Max(int a,int b) { if(a==b) return NULL; else if(a>b) return a; else return b; }
LIBRARY MyDll
EXPORTS
Max@1
4、编译程序生成动态连接库。
4、编译程序生成动态连接库
二、用.def文件创建动态连接库DllDemo.dll。
1、删除DllDemo工பைடு நூலகம்中的DllDemo.h文件。
2、在DllDemo.cpp文件头,删除 #include DllDemo.h语句。
3、向该工程中加入一个文本文件,命名为DllDemo.def并写入如下语句:
动态连接库的创建步骤:
一、创建Non-MFC DLL动态链接库
1、打开File —> New —> Project选项,选择Win32 Dynamic-Link Library —>sample project
—>工程名:DllDemo
2、新建一个.h文件DllDemo.h
以下是引用片段: #ifdef DllDemo_EXPORTS #define DllAPI __declspec(dllexport) #else #define DllAPI __declspec(dllimport) extern "C" //原样编译 { DllAPI int __stdcall Max(int a,int b); //__stdcall使非C/C++语言内能够调用API } #endif

VC中使用动态链接库DLL

VC中使用动态链接库DLL

VC中使用动态链接库DLL:静态调用和动态调用2010-05-02 15:56VC中生成DLL的办法见:/KB/DLL/RegDLL.aspx--------------------------------------VC中使用DLL/c1230v/articles/1401448.html调用DLL有两种方法:静态调用和动态调用.(一).静态调用其步骤如下:1.把你的youApp.DLL拷到你目标工程(需调用youApp.DLL的工程)的Debug目录下;2.把你的youApp.lib拷到你目标工程(需调用youApp.DLL的工程)目录下;3.把你的youApp.h(包含输出函数的定义)拷到你目标工程(需调用youApp.DLL的工程)目录下;4.打开你的目标工程选中工程,选择Visual C++的Project主菜单的Settings菜单;5.执行第4步后,VC将会弹出一个对话框,在对话框的多页显示控件中选择Link页。

然后在Object/library modules输入框中输入:youApp.lib6.选择你的目标工程Head Files加入:youApp.h文件;7.最后在你目标工程(*.cpp,需要调用DLL中的函数)中包含你的:#include "youApp.h"注:youApp是你DLL的工程名。

(二).动态调用其程序如下:动态调用时只需做静态调用步骤1.01 {02 HINSTANCE hDllInst = LoadLibrary("youApp.DLL");03if(hDllInst)04 {05typedef DWORD (WINAPI *MYFUNC)(DWORD,DWORD);06 MYFUNC youFuntionNameAlias = NULL;07// youFuntionNameAlias 函数别名08 youFuntionNameAlias = (MYFUNC)GetProcAddress(hDllInst,"youFuntionName"); 09// youFuntionName 在DLL中声明的函数名10if(youFuntionNameAlias)11 {12 youFuntionNameAlias(param1,param2);13 }14 FreeLibrary(hDllInst);15 }16 }显式(静态)调用:LIB + DLL + .H,注意.H中dllexport改为dllimport隐式(动态)调用:DLL + 函数原型声明,先LoadLibrary,再GetProcAddress(即找到DLL中函数的地址),不用后FreeLibrary--------------------------------------动态链接库DLL的链接/mmycly/archive/2006/06/15/917076.aspx应用程序使用DLL可以采用两种方式:一种是隐式链接,另一种是显式链接。

VC 动态链接库(DLL)编程深入浅出4

VC 动态链接库(DLL)编程深入浅出4

VC 动态链接库(DLL)编程深入浅出4这是《VC++动态链接库(DLL)编程深入浅出》的第四部分,阅读本文前,请先阅读前三部分:(一)、(二)、(三)。

MFC扩展DLL的内涵为MFC的扩展,用户使用MFC 扩展DLL就像使用MFC本身的DLL一样。

除了可以在MFC扩展DLL的内部使用MFC以外,MFC扩展DLL与应用程序的接口部分也可以是MFC。

我们一般使用MFC扩展DLL来包含一些MFC的增强功能,譬如扩展MFC的CStatic、 CButton等类使之具备更强大的能力。

使用Visual C++向导生产MFC扩展DLL时,MFC向导会自动增加DLL的入口函数DllMain:extern \DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) {// Remove this if you use lpReserved UNREFERENCED_PARAMETER(lpReserved);if (dwReason == DLL_PROCESS_ATTACH) {TRACE0(\// Extension DLL one-time initializationif (!AfxInitExtensionModule(MfcexpenddllDLL, hInstance)) return 0;// Insert this DLL into the resource chain// NOTE: If this Extension DLL is being implicitly linked to by // an MFC Regular DLL (such as an ActiveX Control) // instead of an MFC application, then you will want to // remove this line from DllMain and put it in a separate // function exported from this Extension DLL. The Regular DLL // that uses this Extension DLL should then explicitly call that // function to initialize this Extension DLL. Otherwise, // the CDynLinkLibrary object will not be attached to the // Regular DLL's resource chain, and serious problems will // result.new CDynLinkLibrary(MfcexpenddllDLL); }else if (dwReason == DLL_PROCESS_DETACH) {TRACE0(\ // Terminate the library before destructors are called AfxTermExtensionModule(MfcexpenddllDLL); }return 1; // ok }上述代码完成MFC扩展DLL的初始化和终止处理。

(动态链接库)DLL编写与使用方法

(动态链接库)DLL编写与使用方法

DLL的创建与调用1、DLL的概念DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数、变量或类。

这些可以直接拿来使用。

静态链接库与动态链接库的区别:(1)静态链接库与动态链接库都是共享代码的方式。

静态链接库把最后的指令都包含在最终生成的EXE 文件中了;动态链接库不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。

(2)静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。

动态链接库的分类:Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。

非MFC动态库不采用MFC 类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用;MFC规则DLL 包含一个继承自CWinApp的类,但其无消息循环;MFC扩展DLL采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用程序所调用。

2、创建一个DLL2.1 非MFC的DLL2.1.1声明导出函数:extern “C” __declspec(dllexport) int add(int a, int b);其中extern “C”为声明为C编译。

由于C++编译器在编译的时候会造成其函数名的该变,在其他应用程序中导致函数不可调用,而C编译器则不会在编译后改变其函数名。

这样如果用C编译的程序来调用该dll中的函数时,可能会造成找不到该函数。

__declspec(dllexport)表示该函数为DLL输出函数,即其他应用程序可以调用该函数从dll中声明输出函数有两种方式:(1)另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VC++ MFC DLL动态链接库编写详解(2008-07-10 17:38:40)标签:it分类:com技术然能用DLL实现的功能都可以用COM来替代,但DLL的优点确实不少,它更容易创建。

本文将讨论如何利用VC MFC来创建不同类型的DLL,以及如何使用他们。

一、DLL的不同类型使用VC++可以生成两种类型的DLL:MFC扩展DLL和常规DLL。

常规DLL有可以分为动态连接和静态连接。

Visual C++还可以生成WIN32 DLL,但不是这里讨论的主要对象。

1、MFC扩展DLL每个DLL都有某种类型的接口:变量、指针、函数、客户程序访问的类。

它们的作用是让客户程序使用DLL,MFC扩展DLL可以有C++的接口。

也就是它可以导出C++类给客户端。

导出的函数可以使用C++/MFC数据类型做参数或返回值,导出一个类时客户端能创建类对象或者派生这个类。

同时,在DLL中也可以使用DLL和MFC。

Visual C++使用的MFC类库也是保存在一个DLL中,MFC扩展DLL动态连接到MFC代码库的DLL,客户程序也必须要动态连接到MFC代码库的DLL。

(这里谈到的两个DLL,一个是我们自己编写的DLL,一个装MFC类库的DLL)现在MFC代码库的DLL也存在多个版本,客户程序和扩展DLL都必须使用相同版本的MFC代码DLL。

所以为了让MFC扩展DLL能很好的工作,扩展DLL和客户程序都必须动态连接到MFC代码库DLL。

而这个DLL必须在客户程序运行的计算机上。

2、常规DLL使用MFC扩展DLL的一个问题就是DLL仅能和MFC客户程序一起工作,如果需要一个使用更广泛的DLL,最好采用常规DLL,因为它不受MFC的某些限制。

常规DLL也有缺点:它不能和客户程序发送指针或MFC派生类和对象的引用。

一句话就是常规DLL和客户程序的接口不能使用MFC,但在DLL和客户程序的内部还是可以使用MFC。

当在常规DLL的内部使用MFC代码库的DLL时,可以是动态连接/静态连接。

如果是动态连接,也就是常规DLL需要的MFC代码没有构建到DLL中,这种情况有点和扩展DLL类似,在DLL运行的计算机上必须要MFC代码库的DLL。

如果是静态连接,常规DLL里面已经包含了需要的MFC代码,这样DLL的体积将比较大,但它可以在没有MFC代码库DLL的计算机上正常运行。

二、建立DLL利用Visual C++提供的向导功能可以很容易建立一个不完成任何实质任务的DLL,这里就不多讲了,主要的任务是如何给DLL添加功能,以及在客户程序中利用这个DLL1、导出类用向导建立好框架后,就可以添加需要导出类的.cpp .h文件到DLL中来,或者用向导创建C++ Herder File/C++ Source File。

为了能导出这个类,在类声明的时候要加“_declspe c(dllexport)”,如:class _declspec(dllexport) CMyClass{...//声明}如果创建的MFC扩展DLL,可以使用宏:AFX_EXT_CLASS:class AFX_EXT_CLASS CMyClass{...//声明}这样导出类的方法是最简单的,也可以采用.def文件导出,这里暂不详谈。

2、导出变量、常量、对象很多时候不需要导出一个类,可以让DLL导出一个变量、常量、对象,导出它们只需要进行简单的声明:_declspec(dllexport) int MyInt;_declspec(dllexport) extern const COLORREF MyColor=RGB(0,0,0);_declspec(dllexport) CRect rect(10,10,20,20);要导出一个常量时必须使用关键字extern,否则会发生连接错误。

注意:如果客户程序识别这个类而且有自己的头文件,则只能导出一个类对象。

如果在DLL 中创建一个类,客户程序不使用头文件就无法识别这个类。

当导出一个对象或者变量时,载入DLL的每个客户程序都有一个自己的拷贝。

也就是如果两个程序使用的是同一个DLL,一个应用程序所做的修改不会影响另一个应用程序。

我们在导出的时候只能导出DLL中的全局变量或对象,而不能导出局部的变量和对象,因为它们过了作用域也就不存在了,那样DLL就不能正常工作。

如:MyFunction(){_declspec(dllexport) int MyInt;_declspec(dllexport) CMyClass object;}3、导出函数导出函数和导出变量/对象类似,只要把_declspec(dllexport)加到函数原型开始的位置:_declspec(dllexport) int MyFunction(int);如果是常规DLL,它将和C写的程序使用,声明方式如下:extern "c" _declspec(dllexport) int MyFunction(int);实现:extern "c" _declspec(dllexport) int MyFunction(int x){...//操作}如果创建的是动态连接到MFC代码库DLL的常规DLL,则必须插入AFX_MANAGE_STATE作为导出函数的首行,因此定义如下:extern "c" _declspec(dllexport) int MyFunction(int x){AFX_MANAGE_STATE(AfxGetStaticModuleState());...//操作}有时候为了安全起见,在每个常规DLL里都加上,也不会有任何问题,只是在静态连接的时候这个宏无效而已。

这是导出函数的方法,记住只有MFC扩展DLL才能让参数和返回值使用MFC的数据类型。

4、导出指针导出指针的方式如下:_declspec(dllexport) int *pint;_declspec(dllexport) CMyClass object = new CMyClass;如果声明的时候同时初始化了指针,就需要找到合适的地方类释放指针。

在扩展DLL中有个函数DllMain()。

(注意函数名中的两个l要是小写字母),可以在这个函数中处理指针:# include "MyClass.h"_declspec(dllexport) CMyClass *pobject = new CMyClass;DllMain(HINSTANCE hInstance,DWORD dwReason,LPVOID lpReserved){if(dwReason == DLL_PROCESS_ATTACH){.....//}else if(dwReason == DLL_PROCESS_DETACH){delete pobject;}}常规DLL有一个从CWinApp派生的类对象处理DLL的开和关,可以使用类向导添加InitIns tance/ExitInstance函数。

int CMyDllApp::ExitInstance(){delete pobject;return CWinApp::ExitInstance();}三、在客户程序中使用DLL编译一个DLL时将创建两个文件.dll文件和.lib文件。

首先将这两个文件复制到客户程序项目的文件夹里,这里需要注意DLL和客户程序的版本问题,尽量使用相同的版本,都使用RELEASE或者都是DEBUG版本。

接着就需要在客户程序中设置LIB文件,打开Project Settings--- >Link--->Object/lib rary Modules中输入LIB的文件名和路径。

如:Debug/SampleDll.lib。

除了DLL和LIB文件外,客户程序需要针对导出类、函数、对象和变量的头文件,现在进行导入添加的关键字就是:_declspec(dllimport),如:_declspec(dllimport) int MyFunction(int);_declspec(dllimport) int MyInt;_declspec(dllimport) CMyClass object;extern "C" _declspec(dllimport) int MyFunction(int);在有的时候为了导入类,要把相应类的头文件添加到客户程序中,不同的是要修改类声明的标志:class _declspec(dllimport) CMyClass,如果创建的是扩展DLL,两个位置都是:class AFX_EXT_CLASS CMyClass。

使用DLL的一个比较严重的问题就是编译器之间的兼容性问题。

不同的编译器对c++函数在二进制级别的实现方式是不同的。

所以对基于C++的DLL,如果编译器不同就有很麻烦的。

如果创建的是MFC扩展DLL,就不会存在问题,因为它只能被动态连接到MFC的客户应用程序。

这里不是本文讨论的重点。

一、重新编译问题我们先来看一个在实际中可能遇到的问题:比如现在建立好了一个DLL导出了CMyClass类,客户也能正常使用这个DLL,假设CMyCla ss对象的大小为30字节。

如果我们需要修改DLL中的CMyClass类,让它有相同的函数和成员变量,但是给增加了一个私有的成员变量int类型,现在CMyClass对象的大小就是34字节了。

当直接把这个新的DLL给客户使用替换掉原来30字节大小的DLL,客户应用程序期望的是30字节大小的对象,而现在却变成了一个34字节大小的对象,糟糕,客户程序出错了。

类似的问题,如果不是导出CMyClass类,而在导出的函数中使用了CMyClass,改变对象的大小仍然会有问题的。

这个时候修改这个问题的唯一办法就是替换客户程序中的CMyClass 的头文件,全部重新编译整个应用程序,让客户程序使用大小为34字节的对象。

这就是一个严重的问题,有的时候如果没有客户程序的源代码,那么我们就不能使用这个新的DLL了。

二、解决方法为了能避免重新编译客户程序,这里介绍两个方法:(1)使用接口类。

(2)使用创建和销毁类的静态函数。

1、使用接口类接口类的也就是创建第二个类,它作为要导出类的接口,所以在导出类改变时,也不需要重新编译客户程序,因为接口类没有发生变化。

假设导出的CMyClass类有两个函数FunctionA FunctionB。

现在创建一个接口类CMyInter face,下面就是在DLL中的CMyInterface类的头文件的代码:# include "MyClass.h"class _declspec(dllexport) CMyInterface{CMyClass *pmyclass;CMyInterface();~CMyInterface();public:int FunctionA(int);int FunctionB(int);};而在客户程序中的头文件稍不同,不需要INCLUDE语句,因为客户程序没有它的拷贝。

相关文档
最新文档