VC++、MFC、COM和ATL的区别

转载 2017年04月16日 13:53:12
今天看到的,感觉不错。转载了

一、什么是MFC

    微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinOS下开发人员使用的专业C++ SDK(SDK,Standard SoftWare Develop Kit,专业软件开发平台),MFC就是挂在它之上的一个输助软件开发包,MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范,而VC++只是一个编译器,或者说是一种编译器+源程序编辑器的 IDE,WS,PlatForm, MFC同 BC++集成的VCL一样是一个非智辅式的软件包,类库,只不过MFC类是微软为VC++专配的)。MFC是Win API与C++的结合。 

最后要明白MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建,销毁),而是一些在WinOS(用MFC编写的程序绝大部分都在WinOS中运行)中实现内部处理的类,如数据库的管理类等。

二、什么是COM

    所谓COM(Componet Object Model,组件对象模型),是一种说明如何建立可动态互变组件的规范,此规范提供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准。通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否相同、使用的开发语言是否一致以及是否运行于同一台计算机。

COM的优点,首先:用户一般希望能够定制所用的应用程序,而组件技术从本质上讲就是可被定制的,因而用户可以用更能满足他们需要的某个组件来替换原来的那个。其次,由于组件是相对应用程序独立的部件,我们可以在不同的程序中使用同一个组件而不会产生任何问题,软件的可重用性将大大的得到增强。第三,随着网络带宽及其重要性的提高,分布式网络应用程序毫无疑问的成为软件市场上越来越重要的买点。组件价构可以使得开发这类应用程序的过程得以简化。

三、什么是ATL

ATL是ActiveX Template Library的缩写,它是一套C++模板库。使用ATL能够快速地开发出高效、简洁的代码,同时对COM组件的开发提供最大限度的代码自动生成以及可视化支持。

在ATL产生以前,开发COM组件的方法主要有两种:一是使用COMSDK直接开发COM组件,另一种方式是通过MFC提供的COM支持来实现。

直接使用COMSDK开发COM组件是最基本也是最灵活的方式。通过使用Microsoft提供的开发包,我们可以直接编写COM程序。但是,这种开发方式的难度和工作量都很大,一方面,要求开发者对于COM的技术原理具有比较深入的了解;另一方面,直接使用COMSDK要求开发人员自己去实现COM应用的每一个细节,完成大量的重复性工作。这样做的结果是,不仅降低了工作效率,同时也使开发人员不得不把许多精力投入到与应用需求本身无关的技术细节中。虽然这种开发方式对于某些特殊的应用很有必要,但这种编程方式并不符合组件化程序设计方法所倡导的可重用性,因此,直接采用COMSDK不是一种理想的开发方式。

使用MFC提供的COM支持开发COM应用可以说在使用COMSDK基础上提高了自动化程度,缩短了开发时间。MFC采用面向对象的方式将 COM的基本功能封装在若干MFC的C++类中,开发者通过继承这些类得到COM支持功能。为了使派生类方便地获得COM对象的各种特性,MFC中有许多预定义宏,这些宏的功能主要是实现COM接口的定义和对象的注册等通常在COM对象中要用到的功能。开发者可以使用这些宏来定制COM对象的特性。

四、总结

对于程序员来说,还有一个区别就是ATL要求你懂得更多的COM知识,这样你才能直接使用ATL来编写COM组件或者控件,而MFC甚至不要求你知道COM是个什么东西就能写出一个ActiveX控件来了。此外,如果你编写的控件有GUI(图形用户界面)的话,你最好使用MFC;如果根本不需要GUI,那最好使用ATL编写,当然你也可以选择MFC来编写不可见的控件,但是开销比ATL大,而执行效率却小于ATL;但是有时候这种差别所带来影响可以忽略掉的话,那么我建议你还是用MFC来写,唯一的理由是它开发起来更简单,易于调试。

COM组件开发(六)——使用ATL开发COM组件

使用ATL开发COM组件           使用ATL开发COM组件之前,要对几个重要的类进行说明:           CComModule           这是ATL的中心模块类,它的...
  • q5806622
  • q5806622
  • 2015年02月27日 10:10
  • 2219

[COM/ATL]组件、对象、MFC、ATL的区别

组件(Component)和对象(Object)之间的区别 先明确组件(Component)和对象(Object)之间的区别。组件是一个可重用的模块,它是由一 组处理过程、数据封装和用户接口组成的业...
  • ouyangshima
  • ouyangshima
  • 2013年07月19日 19:58
  • 1536

VC++、MFC、COM和ATL的区别

一、什么是MFC     微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinOS下开...
  • avatar1912
  • avatar1912
  • 2014年10月20日 07:30
  • 425

VC++、MFC、COM和ATL的区别

转载至http://hi.baidu.com/huqingshuye/item/eb9b3e31f2a0dcfae6bb7a74   一、什么是MFC     微软基础类(Microsoft F...
  • qingtianweichong
  • qingtianweichong
  • 2013年03月19日 19:57
  • 517

用ATL创建COM组件详细解说

用ATL创建COM组件详细解说 服务器interfacemicrosoftlibrarybasicobject 一、创建一个模型(工程) MyProj。 二、给模型(工程)增加一个组...
  • jolin678
  • jolin678
  • 2015年09月23日 11:22
  • 522

我的COM和ATL的学习

首先声明本人并非COM/ATL高手,尽管本人接触他们已经有4年了,但是因为工作中的一些原因一直未能深入研究和广泛的实际的使用它们。不过回想学习它们的痛苦经历,实在是有点不堪回首。在此仅以此文和大家探讨...
  • chenlycly
  • chenlycly
  • 2014年10月12日 17:33
  • 878

OLE、ActiveX、COM、ATL联系与区别

熟悉面向对象编程和网络编程的人一定对ActiveX、OLE和COM/DCOM这些概念不会陌生,但是它们之间究竟是什么样的关系,对许多们还是比较模糊的。在具体介绍它们的关系之间,我们还是先明确组件(Co...
  • lp310018931
  • lp310018931
  • 2015年09月19日 18:09
  • 1017

ATL和MFC创建ActiveX控件的区别

ATL和MFC创建ActiveX控件的区别 ATL和MFC创建ActiveX控件的区别 在visual C++ 6.0中,ATL和MFC代表了两种不同的框架,分别面向不同类型的基于Window...
  • ljh081231
  • ljh081231
  • 2014年04月11日 10:18
  • 4592

创建ATL工程及使用MFC测试COM组件

一、创建ATL工程 1、创建ATL项目,取名为MyATL 2、在ATL项目向导中,勾选【支持MFC】(利用MFC测试用)、【支持 COM+ 1.0】和【支持部件注册器】,其余的选项默认,点击完...
  • jiangqin115
  • jiangqin115
  • 2015年09月06日 17:47
  • 790

VC++ 的MFC 和ATL 及COM 是什么?

一、什么是MFC         微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinOS...
  • CNHK1225
  • CNHK1225
  • 2015年07月07日 11:42
  • 1052
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC++、MFC、COM和ATL的区别
举报原因:
原因补充:

(最多只允许输入30个字)