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

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

ID:42770379

大小:35.50 KB

页数:7页

时间:2019-09-21

VC++ MFC DLL动态链接库编写详解_第1页
VC++ MFC DLL动态链接库编写详解_第2页
VC++ MFC DLL动态链接库编写详解_第3页
VC++ MFC DLL动态链接库编写详解_第4页
VC++ MFC DLL动态链接库编写详解_第5页
资源描述:

《VC++ MFC DLL动态链接库编写详解》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、VC++ MFC DLL动态链接库编写详解(2008-07-1017:38:40)标签:it 分类:com技术然能用DLL实现的功能都可以用COM来替代,但DLL的优点确实不少,它更容易创建。本文将讨论如何利用VCMFC来创建不同类型的DLL,以及如何使用他们。一、DLL的不同类型使用VC++可以生成两种类型的DLL:MFC扩展DLL和常规DLL。常规DLL有可以分为动态连接和静态连接。VisualC++还可以生成WIN32DLL,但不是这里讨论的主要对象。1、MFC扩展DLL每个DLL都有某种类型的接口:变量、指针、函

2、数、客户程序访问的类。它们的作用是让客户程序使用DLL,MFC扩展DLL可以有C++的接口。也就是它可以导出C++类给客户端。导出的函数可以使用C++/MFC数据类型做参数或返回值,导出一个类时客户端能创建类对象或者派生这个类。同时,在DLL中也可以使用DLL和MFC。VisualC++使用的MFC类库也是保存在一个DLL中,MFC扩展DLL动态连接到MFC代码库的DLL,客户程序也必须要动态连接到MFC代码库的DLL。(这里谈到的两个DLL,一个是我们自己编写的DLL,一个装MFC类库的DLL)现在MFC代码库的DLL

3、也存在多个版本,客户程序和扩展DLL都必须使用相同版本的MFC代码DLL。所以为了让MFC扩展DLL能很好的工作,扩展DLL和客户程序都必须动态连接到MFC代码库DLL。而这个DLL必须在客户程序运行的计算机上。2、常规DLL使用MFC扩展DLL的一个问题就是DLL仅能和MFC客户程序一起工作,如果需要一个使用更广泛的DLL,最好采用常规DLL,因为它不受MFC的某些限制。常规DLL也有缺点:它不能和客户程序发送指针或MFC派生类和对象的引用。一句话就是常规DLL和客户程序的接口不能使用MFC,但在DLL和客户程序的内部

4、还是可以使用MFC。当在常规DLL的内部使用MFC代码库的DLL时,可以是动态连接/静态连接。如果是动态连接,也就是常规DLL需要的MFC代码没有构建到DLL中,这种情况有点和扩展DLL类似,在DLL运行的计算机上必须要MFC代码库的DLL。如果是静态连接,常规DLL里面已经包含了需要的MFC代码,这样DLL的体积将比较大,但它可以在没有MFC代码库DLL的计算机上正常运行。二、建立DLL利用VisualC++提供的向导功能可以很容易建立一个不完成任何实质任务的DLL,这里就不多讲了,主要的任务是如何给DLL添加功能,以

5、及在客户程序中利用这个DLL1、导出类用向导建立好框架后,就可以添加需要导出类的.cpp.h文件到DLL中来,或者用向导创建C++HerderFile/C++SourceFile。为了能导出这个类,在类声明的时候要加“_declspec(dllexport)”,如:class_declspec(dllexport)CMyClass{...//声明}如果创建的MFC扩展DLL,可以使用宏:AFX_EXT_CLASS:classAFX_EXT_CLASSCMyClass{...//声明}这样导出类的方法是最简单的,也可以采用

6、.def文件导出,这里暂不详谈。2、导出变量、常量、对象很多时候不需要导出一个类,可以让DLL导出一个变量、常量、对象,导出它们只需要进行简单的声明:_declspec(dllexport)intMyInt;_declspec(dllexport)externconstCOLORREFMyColor=RGB(0,0,0);_declspec(dllexport)CRectrect(10,10,20,20);要导出一个常量时必须使用关键字extern,否则会发生连接错误。注意:如果客户程序识别这个类而且有自己的头文件,则只

7、能导出一个类对象。如果在DLL中创建一个类,客户程序不使用头文件就无法识别这个类。当导出一个对象或者变量时,载入DLL的每个客户程序都有一个自己的拷贝。也就是如果两个程序使用的是同一个DLL,一个应用程序所做的修改不会影响另一个应用程序。我们在导出的时候只能导出DLL中的全局变量或对象,而不能导出局部的变量和对象,因为它们过了作用域也就不存在了,那样DLL就不能正常工作。如:MyFunction(){_declspec(dllexport)intMyInt;_declspec(dllexport)CMyClassobje

8、ct;}3、导出函数导出函数和导出变量/对象类似,只要把_declspec(dllexport)加到函数原型开始的位置:_declspec(dllexport)intMyFunction(int);如果是常规DLL,它将和C写的程序使用,声明方式如下:extern"c"_declspec(dllexport)intM

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。