DLL的分类
来源:互联网 发布:av淘宝2017年最新地址 编辑:程序博客网 时间:2024/05/16 15:21
微软的Visual C++支持三种DLL,它们分别是
Non-MFC Dll(非MFC动态库)、
Regular Dll(常规DLL)、
Extension Dll(扩展DLL)。
(即非mfcDLL、mfc规则DLL,mfc扩展DLL)
1、Non-MFCDLL(非MFC动态库)这种动态链接库指的是不用MFC的类库结构,直接用C语言写的DLL,其导出的函数是标准的C接口,能被非MFC或MFC编写的应用程序所调用。如果建立的DLL不需要使用MFC,那么应该建立Non-MFCDLL,因为使用MFC会增大用户库的大小,从而浪费用户的磁盘和内存空间。
2、RegularDLL(常规DLL)----有一个继承CWinApp的类
一个明显的特点是在源文件里有一个继承CWinApp的类 (虽然从CWinApp派生,但没有消息循环)
这种动态链接库和下述的ExtensionDll一样,是用MFC类库编写的,它的一个明显的特点是在源文件里有一个继承CWinApp的类(注意:此类DLL虽然从CWinApp派生,但没有消息循环),被导出的函数是C函数、C++类或者C++成员函数(注意不要把术语C++类与MFC的微软基础C++类相混淆),调用常规DLL的应用程序不必是MFC应用程序,只要是能调用类C函数的应用程序就可以,它们可以是在VisualC++、Delphi、VisualBasic、BorlandC等编译环境下利用DLL开发应用程序。
常规DLL又可细分成静态链接到MFC和动态链接到MFC两种:
(1)静态连接到MFC的动态连接库只被VC的专业般和企业版所支持。该类DLL里的输出函数可以被任意Win32程序使用,包括使用MFC的应用程序。输出函数有如下形式:
extern"C"EXPORTYourExportedFunction();如果没有extern"C"修饰,输出函数仅仅能从C++代码中调用。
(2)动态链接到MFC的常规DLL里的输出函数可以被任意Win32程序使用,包括使用MFC的应用程序。所有从DLL输出的函数应该以如下语句开始:
AFX_MANAGE_STATE(AfxGetStaticModuleState())
此语句用来正确地切换MFC模块状态。
3、ExtensionDll(扩展DLL)------没有一个从CWinApp派生的对象
这种动态链接库是使用MFC的动态链接版本所创建的,并且它只被用MFC类库所编写的应用程序所调用。例如你已经创建了一个从MFC的CtoolBar类的派生类用于创建一个新的工具栏,为了导出这个类,你必须把它放到一个MFC扩展的DLL中。扩展DLL和常规DLL不一样,它没有一个从CWinApp继承而来的类的对象,所以,开发人员必须在DLL中的DllMain函数添加初始化代码和结束代码。与常规DLL相比,扩展的DLL有如下不同点: 1)它没有一个从CWinApp派生的对象;
2)它必须有一个DLLMain函数;
3)DLLMain调用AfxInitExtensionModule函数,必须检查该函数的返回值,如果返回0,DLLMmain也返回0;
4)如果它希望输出CRuntimeClass类型的对象或者资源(Resources),则需要提供一个初始化函数来创建一个CDynLinkLibrary对象。并且,有必要把初始化函数输出;
5)使用扩展DLL的MFC应用程序必须有一个从CWinApp派生的类,而且,一般在InitInstance里调用扩展DLL的初始化函数- dll的分类
- DLL的分类
- DLL的分类
- dll分类,自己暂时的理解
- 解决VS2005中的MFC80UD.dll找不到的问题分类:
- DLL的概念、分类、调用,DLL如何导出函数、变量和类
- caffe 分类程序 封装成dll中遇到的问题记录
- listview的分类,仿京东分类
- Excel-数据分类导出至多个Sheet NPOI.dll
- 获取当前分类的顶级分类的分类名称
- 收藏:偶要用delphi写几个dll来公开发布出去,让其他工具的程序员调用。应该注意些什么事项 关键字:分类 :个人专区密级 :公开
- 我的分类我的分类
- 文本分类入门(九)文本分类问题的分类
- 文本分类入门(九)文本分类问题的分类
- 文本分类入门(九)文本分类问题的分类
- 一段分类代码--产品分类的!
- 文本分类_中英文分类的异同
- 基于bayes分类器的文本分类
- 从文本文件中的表读取到二维数组与DataTable并在listbox中展示其中的一列
- 所以拱桥的承重力要比平桥多得多,盖超
- 百度开发这云开发 的mysql数据库密码
- myeclipse,Tomcat中部署多个工程的时候出现内存溢出的问题的解决办法
- 程序员 十八个有趣的事实
- DLL的分类
- 【线段树】深入浅出线段树,来去无影去无踪
- ngui pack字体在unity3d4.x显示问题
- 使用 Salt + Hash 来为密码加密
- 十种表达“你的代码写的很烂”的好方法
- "Caused by: java.lang.UnsatisfiedLinkError: Library hello-jni not found“问题解决
- IOS应用开发中的tips - UITableView的sectionView跟随tableView滚动
- 执行计划
- Android 语音通话模块介绍(一) 开源的SIP协议栈