先有OLE还是先有COM?

ops/2025/3/28 7:41:27/

一、历史发展:OLE先于COM诞生‌

1.OLE的早期阶段(1991年)‌

OLE(Object Linking and Embedding)最初是微软为解决‌复合文档‌问题提出的技术,例如在Word中插入Excel表格或图片‌。其1.0版本于1991年发布,核心目标是实现应用程序间的数据链接与嵌入,但功能局限于特定场景(如文档混合编辑)‌。

2.COM的诞生(1993年)‌

随着OLE的发展,微软工程师发现其底层逻辑(如对象通信、接口定义)具有通用性。因此,在1993年发布的‌OLE 2.0‌中,微软将OLE的底层机制抽象为‌COM(Component Object Model)‌,作为独立的技术框架支撑OLE功能‌。
关键点‌:COM并非独立于OLE诞生,而是从OLE中提炼出的通用模型‌。

二、技术演进:从OLE到COM的抽象化过程‌

1.OLE的局限性驱动技术升级‌

OLE 1.0仅支持简单的数据嵌入与链接,且依赖特定应用程序的协作‌。
OLE 2.0需要更灵活的组件交互能力(如自动化、控件扩展),因此引入COM作为底层架构,解决跨语言、跨进程的通信问题‌。

2.COM的通用性设计‌

COM脱离了OLE的“复合文档”应用场景,定义了‌二进制接口标准‌、‌接口继承机制‌和‌全局唯一标识(GUID)‌,成为Windows生态中‌跨语言组件开发‌的基石‌。
例如‌:

  • COM支持C++、VB、C#等语言编写的组件互相调用‌。
  • OLE的接口(如IOleObject)均基于COM的IUnknown接口实现‌。


结论:OLE与COM的依存关系‌

1.时间顺序‌:

OLE(1991年)早于COM(1993年)出现,但COM的技术概念在OLE的迭代过程中逐步形成‌。

2.技术关系‌:
  • OLE是COM的早期应用场景‌,其功能(如文档嵌入)依赖COM的底层接口机制‌。
  • COM是OLE的底层支撑‌,并扩展至更广泛的领域(如ActiveX、系统服务)‌。

可以将两者的关系想象为‌“应用层”与“基础设施层”‌:

  1. OLE是“上层建筑”‌:专注于解决文档嵌入、拖放操作等具体问题。
  2. COM是“基础框架”‌:提供通用的对象创建、接口查询、跨进程通信等能力。

直观结论‌:

  • 没有COM,OLE无法工作‌(就像没有乐高积木,定制化玩具无法存在)。
  • 没有OLE,COM依然强大‌(万能积木能做的事情远不止拼装汽车)。

理解这一关系,有助于在开发中灵活选择技术:若需定制文档交互,用OLE;若需构建通用组件,直接基于COM设计。

简言之‌:OLE作为具体需求推动了COM的诞生,而COM的通用性使其超越了OLE的原始范畴‌。

 


http://www.ppmy.cn/ops/167384.html

相关文章

类和对象C++

封装 将属性和行为作为一个整体&#xff0c;表现生活中的事物 封装的意义 #include<iostream> #include<string.h> using namespace std; //设计学生类 class student { public://公共权限/*类中的属性和行为 统一称为成员属性成员属性成员变量行为成员函数成员…

NVM 多版本node.js管理工具

在使用vue2.0之后需要切换到vue3.0的时候&#xff0c;就需要再一个环境上安装多版本的node.js&#xff0c;此时需要NVM来帮助实现。 1、卸载原电脑上安装的node.js 2、安装NVM &#xff08;下载地址&#xff1a;https://github.com/coreybutler/nvm-windows/releases&#xf…

对接豆包大模型

一、注册账号 豆包官网&#xff1a;点击跳转 二、账号认证 三、选择产品 四、选择模型 五、开通服务 六、获取密钥 API_KEY是作为HTTP的请求的鉴权信息使用&#xff0c;需要作为HTTP的Authorization请求字段使用。 七、请求参数 可以知道&#xff0c;如果想要接入AI大模型&…

RAGFlow爬虫组件使用及ragflow vs dify 组件设计对比

上周末&#xff0c;两台电脑都失联了&#xff0c;一个是断网了&#xff0c;一个被我不小心关机。导致我两天没环境。只能整理&#xff0c;学点东西。 上周有个有个群友问我ragflow爬虫的没法使用的问题。幸好周六早上的时候实践了下。 使用网络爬虫 我搭建一个最简单的工作流…

yt-dlp工具下载视频使用方法

使用 yt-dlp 下载有土播视频时&#xff0c;可以很容易地同时下载字幕文件。 下面是详细操作说明&#xff1a; 一、下载视频并同时下载字幕&#xff1a; 基础命令&#xff1a; yt-dlp --write-subs 视频链接示例&#xff1a; yt-dlp --write-subs https://www.youdubo.com/wa…

【Java】Mybatis学习笔记

目录 一.搭建Mybatis 二.Mybatis核心配置文件解析 1.environment标签 2.typeAliases 3.mappers 三.Mybatis获取参数值 四.Mybatis查询功能 五.特殊的SQL执行 1.模糊查询 2.批量删除 3.动态设置表名 4.添加功能获取自增的主键 六.自定义映射ResultMap 1.配置文件处…

自然语言处理|Top-K 采样如何解锁文本生成的多样性?

一、引言 在自然语言处理&#xff08;NLP&#xff09;的文本生成领域&#xff0c;如何从语言模型输出的概率分布中选择下一个词&#xff0c;是决定生成文本质量与多样性的核心问题。语言模型通常会为词汇表中的每个词分配一个概率值&#xff0c;而采样策略则决定了如何基于这些…

OSG简介

OSG OpenSceneGraph (简称 OSG) 是一个开源的高性能3D图形库。 作用 它为开发者提供了一个强大的API&#xff0c;处理和渲染复杂的3D图形。 特点 OSG基于OpenGL构建&#xff0c;提供了对现代图形技术的支持&#xff0c;如着色器、纹理映射、光照模型等高级特性。 跨平台支…