• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2023-01-31 11:45 Aet 隐藏边栏 |   抢沙发  13 
文章评分 3 次,平均分 5.0

简介

  1. 组件对象模型(COM)是一个独立于平台的分布式面向对象的系统,用于创建可交互的二进制软件组件
  2. 是OLE(复合文档),ActiveX(Internet组件)等的基础技术
  3. 不是一种语言,而是一种标准,用于创建运行时进行交互的可重用的软件库,无须编译到应用程序中,即可使用COM库

跨平台软件重用的基本概念

  1. 组件间函数调用的二进制标准
  2. 将函数强类型化分组到接口中的设置
  3. 提供多态性、功能发现和对象生存期跟踪的基接口
  4. 唯一标识组件及其接口的机制
  5. 从部署创建组件实例的组件加载程序

具有多个共同工作的部分

  1. 提供符合 COM 规范的运行时环境的 主机系统
  2. 定义功能协定和实现接口的 组件 的 接口
  3. 向系统提供组件的 服务器,以及使用组件提供的功能的 客户端
  4. 跟踪将组件部署在本地和远程主机上的位置的 注册表
  5. 一种 服务控制管理器 ,用于查找本地和远程主机上的组件,并将服务器连接到客户端
  6. 一种 结构化存储 协议,用于定义如何在主机的文件系统上导航文件的内容

概率

接口

  1. 成员函数的集合,面向对象中接口类

IID

  1. 每个接口都有其自己的唯一接口标识符 IID, IID 是全局唯一标识符 (GUID) , IID只会对应一个接口

COM类

  1. COM类可以创建实现了多个 接口(接口类)

CLSID

  1. 每个com 类都有一个CLSID,在windows 上com 类 的实现在 dll 或者 exe 上

映射关系

  1. COM 维护系统上安装的 COM 对象的所有 Clsid 的注册数据库
  2. 注册数据库是每个 CLSID 之间的映射,以及承载相应类的 DLL 或 EXE 的位置
  3. 每当调用方想要创建 COM 类的实例时,COM 都将查询此数据库。 调用方只需了解用于请求类的新实例的 CLSID

客户端/服务器

  1. COM 对象及其调用方之间的交互建模为客户端/服务器关系
  2. 客户端是向系统请求 COM 对象的调用方
  3. 服务器是包含向客户端提供服务的 COM 对象的模块

CoCreateInstance

  1. COM框架提供的接口,用于获取想要的对象指针
  2. COM 客户端是向系统传递 CLSID 以请求 COM 对象实例的任何调用方

  1. 参数
    1. 待创建组件的CLSID。 用于找到对应COM 类,和所在的DLL 或者 exe
    2. 用于聚合组件
    3. dwClsContext的作用是限定所创建的组件的执行上下文
    4. iid为组件上待使用的接口的iid。也就是 接口类对应的IID

IUnKnown

  1. IUnknown是指COM标准接口。所有COM接口都继承IUnKnown
  2. 作用
    1. IUnknown::QueryInterface负责得到该组件的其他接口的指针
    2. IUnknown::AddRef/Release负责管理该组件的生存期,但有人使用该组件时,保证该组件不会被意外删除;再没人使用该组件时,保证该组件被自动删除
  3. 原理
    1. IUnknown 中的方法使应用程序能够查询组件上的接口并管理组件的引用计数

注册

  1. 使用regsvr32注册
  2. 注册后,组件信息存放到了注册表\HKEY_CLASSES_ROOT\CLSID

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2024-07-22
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享