张德长

导航

COM组件 学习笔记

 

 

 

  • COM组件是 以Win32动态链接库dll或可执行文件exe的形式发布的可执行代码组成的;
  • COM组件是动态链接的,COM使用dll将组件动态链接起来;
  • COM组件是语言无关的;
  • COM组件可以以二进制的形式发布;
  • COM组件可以在不妨碍老客户的情况下升级;
  • COM组件可以透明的在网络上重新分配;

 

  • COM组件提供了一个所有组件都应遵守的标准;
  • 允许使用组件的多个不同版本;
  • 可以按照相同的方式处理类似的组件;
  • 定义了一个语言无关的架构;
  • 支持对远程组件的透明链接;

 

组件必须满足两个条件:

  • 组件必须动态链接;
  • 组件必须隐藏/封装内部实现细节;

 

COM,也就是组件对象模型Component Object Model,是关于如何建立组件以及如何通过组件建构应用程序的一个规范;

在COM中,对一个组件的访问只能通过函数完成,而绝不能直接通过变量;

纯抽象基类只有虚拟函数,而没有任何实例数据;

定义一个纯抽象基类也就是定义了对应的内存结构,但是,内存只有在派生类中实现此抽象基类时才会被分配;

当派生类继承一个抽象基类时,它将继承此内存结构;

一个纯抽象基类所定义的内存结构可以分为两部分

  • 右边是虚拟函数表vtbl,其中包含一组指向虚拟函数实现的指针;
  • 左侧为一个指向vtbl的指针,称为vtbl指针;

指向抽象基类的指针就指向vtbl指针;

STL,ATL,WTL之间的联系和区别

STL

STL即 Standard Template Library (标准模板库)

STL是惠普实验室开发的一系列软件的统称。

STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器)。

 

ATL

ATL: Active Template Library (活动模板库)

ATL是一个产生C++/COM代码的框架,就如同C语言是一个产生汇编代码的框架。

ATL又不同于MFC,它完全面向COM组件,其技术路线也不同于MFC,MFC使用的是C++中的继承、封装、嵌套等常规技术,而ATL使用了C++中模板、多继承等高级技术,甚至还用到了STL。

WTL

WTL:Windows Templat Library (Windows 模板库)

WTL构架于ATL之上,采用C++模板技术来包装大部窗口控制,并给出一个与MFC相似的应用框架。

在Microsoft的PlatFormSDK中就有WTL是ATL的扩展,也是由ATL小组开发;

COM组件注册的意义:

  • 注册信息记录了组件的CLSID、组件的路径、组件的PropID等;
  • COM组件是跨应用的,各种应用程序需要识别并创建我们的组件;
  • 需要得到组件的路径,而路径是可能改变的;
  • 我们采用CLSID或者PropID去创建组件,不管COM组件的dll在哪个位置,都跟我们创建代码无关;

基本概念

ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。在有目录和其它支持的网络中,COM变成了分布式COM(DCOM)。

ActiveX 控件是用于互联网的很小的程序,有时称为插件程序。它们会允许播放动画,或帮助执行任务,如在 Microsoft Update 安装安全更新,因此可以增强您的浏览体验。 [1]

在创建包括ActiveX程序时,主要的工作就是组件,一个可以自足的在ActiveX网络(Windows,Mac,Linux)中任意运行的程序。这个组件就是ActiveX控件。ActiveX是Microsoft为抗衡Sun Microsystems的JAVA技术而提出的,此控件的功能和java applet功能类似。

OCX 是对象类别扩充组件(Object Linking and Embedding (OLE) Control Extension);是可执行的文件的一种,但不可直接被执行; 是 ocx 控件的扩展名,与 .exe、.dll 同属于PE文件。

COM组件对象模型(Component Object Model,COM) 是基于Windows 平台的一套组件对象接口标准,由一组构造规范和组件对象库组成。

DCOM(Microsoft Distributed Component Object Model分布式组件对象模型,分布式组件对象模式)是一系列微软的概念和程序接口,利用这个接口,客户端程序对象能够请求来自网络中另一台计算机上的服务器程序对象。DCOM基于组件对象模型(COM),COM提供了一套允许同一台计算机上的客户端和服务器之间进行通信的接口(运行在Windows95或者其后的版本上)。

中文名分布式组件对象模型外文名Microsoft Distributed Component Object Model简    称DCOM释    义是一系列微软的概念和程序接口

STL标准模板库(Standard Template Library,STL)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。虽说它主要出现到C++中,但在被引入C++之前该技术就已经存在了很长时间。STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。

Boost 库是一个经过千锤百炼、可移植、提供源代码的 C++ 库,作为标准库的后备,是 C++ 标准化进程的发动机之一。 Boost 库由 C++ 标准委员会库工作组成员发起,在 C++ 社区中影响甚大,其成员已近 2000 人。

Boost 库为我们带来了最新、最酷、最实用的技术,是不折不扣的 “准” 标准库。

MFC(Microsoft Foundation Classes),是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

中文名微软基础类库外文名Microsoft Foundation Classes开发公司微软公司编译平台C++ SDK编程语言C++适用平台Windows

 

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。通过活动模板库,可以建立COM组件,然后通过ASP页面中的脚本对COM对象进行调用。这种COM组件可以包含属性页、对话框等控件。

 

posted on 2022-09-24 18:23  张德长  阅读(431)  评论(0编辑  收藏  举报