COM组件 学习笔记

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组件可以包含属性页、对话框等控件。

Original: https://www.cnblogs.com/zhangdezhang/p/16726197.html
Author: 张德长
Title: COM组件 学习笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611270/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MySQL实战45讲 9

    09 | 普通索引和唯一索引,应该怎么选择? 每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果市民系统需要按照身份证号查姓名,就会执行类似这样的…

    数据库 2023年5月24日
    0110
  • Shell第四章《正则表达式》

    1.1、名词解释 正则表达式(regular expression, RE)是一种字符模式,用于在查找过程中匹配指定的字符。在大多数程序里,正则表达式都被置于两个正斜杠之间;例如/…

    数据库 2023年6月14日
    094
  • 容器化|在 S3 备份恢复 RadonDB MySQL 集群数据

    作者:程润科、钱芬视频:钱芬 上一篇文章我们演示了如何快速实现 MySQL 高可用集群部署,以及部署集群的校验和卸载方式。本文将演示如何对集群进行备份和恢复。 部署版本为 Rado…

    数据库 2023年5月24日
    091
  • Java集合详解

    Java集合 集合体系 Collection接口 Collection接口没有直接的实现子类,它的子接口list(有序容器,可以重复)和set(无序容器,不可重复)是两个重要的子接…

    数据库 2023年6月16日
    094
  • pg小工:pgsql的介绍

    支持邮件列表 http://www.postgresql.org/community/lists/ Original: https://www.cnblogs.com/lyhabc…

    数据库 2023年6月9日
    0104
  • Css3入门详解

    一、Css基本语法 1.Html和Css没分开 点击查看代码 <!DOCTYPE html> <html lang="en"> <…

    数据库 2023年6月16日
    085
  • Linux远程终端连接工具:SecureCRT

    SecureCRT SecureCRT是一款支持 SSH2、SSH1、Telnet、Telnet/SSH、Relogin、Serial、TAPI、RAW 等协议的终端仿真程序 Se…

    数据库 2023年6月11日
    0106
  • java XML标记语言

    可扩展标记语言( Extensive Markup Language),标签中的元素名是可以自己随意写,可拓展是相对于html来说 标记语言:由一对尖括号括起来 用来当做配置文件 …

    数据库 2023年6月16日
    079
  • 文件输入/输出流

    文件输入/输出流程序 运行期间,大部分数据都被存储在 内存中,当程序结束或被关闭时,存储在内存中的数据将会 消失。如果要 永久保存数据,那么最好的办法就是把数据保存到 磁盘的文件中…

    数据库 2023年6月16日
    0125
  • 自定义表单 Flowable 工作流 Springboot vue.js 前后分离 跨域 有代码生成器

    特别注意:本代码为 Springboot 工作流 前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.3.0+ Flowable6.5.0+ my…

    数据库 2023年6月6日
    0125
  • idea在git中拉去eclipse项目及配置环境

    1、VCS—git from version Control url:git@10.11.xx.xx:xpress 项目源码存储位置随意 clone 2、引入jar包 …

    数据库 2023年6月9日
    093
  • 新来的同时问我where 1=1是什么意思

    写在前面 之前在项目代码中写了一条sql查询语句,在where条件搜索中加入了where 1=1,新来的同事之后问我where 1=1 是什么意思,这样没意义啊,我笑了。今天来说明…

    数据库 2023年6月6日
    085
  • 程序员“迷惑代码”大赏

    谈到程序员,对于外行人来说一贯的印象就是格子衫大裤衩外加人字拖,蓬头(秃头)垢面黑眼圈,还有就是”人傻钱多死得快”🤣,这是外界对程序员固有的思想,但是作为新…

    数据库 2023年6月11日
    094
  • 前后端数据交互利器–Protobuf

    Protobuf 介绍 简而言之,Protobuf 是 Google 开源的一款用于处理前后端数据交互格式的工具。通常来讲前后端使用的编程语言是不同的,使用 Protobuf无需多…

    数据库 2023年6月16日
    0100
  • Linux系统下nginx的安装与卸载

    1.1 安装 准备依赖环境 1.安装 gcc 依赖库 yum install gcc-c++ 2.安装 PCRE pcre-devel 依赖库 yum install -y pcr…

    数据库 2023年6月11日
    094
  • 主从复制直接转换MGR_5.7验证试验

    IP port role info 192.168.188.51 4000 node1 master 192.168.188.52 4000 node2 slave1 192.16…

    数据库 2023年6月16日
    0229
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球