COM组件设计与应用(一)起源及复合文件

一、前言

公元一九九五年某个夜黑风高的晚上,我的一位老师跟我说:“小杨呀,以后写程序就和搭积木一样啦。你赶快学习一些OLE的技术吧......”,当时我心里就寻思 :“开什么玩笑?搭积木方式写程序?再过100年吧......”,但作为一名听话的好学生,我开始在书店里“踅摸”(注1)有关OLE的书籍(注2)。功夫不负有心人,终于买到了我的第一本COM书《OLE2 高级编程技术》,这本800多页的大布头花费了我1/5的月工资呀......于是开始日夜耕读.....

功夫不负有心人,我坚持读完了全部著作,感想是:这本书,在说什么呐?

功夫不负有心人,我又读完了一遍大布头,感想是:咳~~~,没懂!

功夫不负有心人,我再,我再,我再读 ... 感想是:哦~~~,读懂了一点点啦,哈哈哈。

...... ......

功夫不负有心人,我终于,我终于懂了。

800页的书对现在的我来说,其实也就10几页有用。到这时候才体会出什么叫“书越读越薄”的道理了。到后来,能买到的书也多了,上网也更方便更便宜了......

为了让VCKBASE上的朋友,不再经历我曾经的痛苦、不再重蹈我“无头苍蝇”般探索的艰辛、为了VCKBASE的蓬勃发展、为了中国软件事业的腾飞(糟糕,吹的太也高了)......我打算节约一些在 BBS 上赚分的时间,写个系列论文,就叫“COM组件设计与应用”吧。今天是第一部分——起源。

二、文件的存储

传说350年前,牛顿被苹果砸到了头,于是发现了万有引力。但到了二十一世纪的现在,任何一个技术的发明和发展,已经不再依靠圣人灵光的一闪。技术的进步转而是被社会的需求、商业的利益、竞争的压力、行业的渗透等推动的。微软在Windows平台上的组件技术也不例外,它的发明,有其必然因素。什么是这个因素那?答案是——文件的存储。

打开记事本程序,输入了一篇文章后,保存。——这样的文件叫“非结构化文件”;

打开电子表格程序,输入一个班的学生姓名和考试成绩,保存。——这样的文件叫“标准结构化文件”;

在我们写的程序中,需要把特定的数据按照一定的结构和顺序写到文件中保存。——这样的文件叫“自定义结构化文件”;(比如 *.bmp 文件)

以上三种类型的文件,大家都见的多了。那么文件存储就依靠上述的方式能满足所有的应用需求吗?恩~~~,至少从计算机发明后的50多年来,一直是够用的了。嘿嘿,下面看看商业利益的推动作用,对文件 的存储形式产生了什么变化吧。30岁以上的朋友,我估计以前都使用过以下几个著名的软件:WordStar(独霸DOS下的英文编辑软件),WPS(裘伯君写的中文编辑软件,据说当年的市场占有率高达90%,各种计算机培训班的必修课程),LOTUS-123(莲花公司出品的电子表格软件)......

微软在成功地推出 Windows 3.1 后,开始垂涎桌面办公自动化软件领域。微软的 OFFICE 开发部门,各小组分别独立地开发了 WORD 和 EXCEL 等软件,并采用“自定义结构”方式,对文件进行存储。在激烈的市场竞争下,为了打败竞争对手,微软自然地产生了一个念头------如果我能在 WORD 程序中嵌入 EXCEL,那么用户在购买了我 WORD 软件的情况下,不就没有必要再买 LOTUS-123 了吗?!“恶毒”(中国微软的同志们看到了这个词,不要激动,我是加了引号的呀)的计划产生后,他们开始了实施工作,这就是 COM 的前身 OLE 的起源(注3)。但立刻就遇到了一个严重的技术问题:需要把 WORD 产生的 DOC 文件和 EXCEL 产生的 XLS 文件保存在一起。

方案 优点 缺点
建立一个子目录,把 DOC、XLS 存储在这同一个子目录中。 数据隔离性好,WORD 不用了解 EXCEL 的存储结构;容易扩展。 结构太松散,容易造成数据的损坏或丢失。

不易携带。

修改文件存储结构,在DOC结构基础上扩展出包容 XLS 的结构。 结构紧密,容易携带和统一管理。 WORD 的开发人员需要通晓 EXCEL 的存储格式;缺少扩展性,总不能新加一个类型就扩展一下结构吧?!

以上两个方案,都有严重的缺陷,怎么解决那?如果能有一个新方案,能够合并前两个方案的优点,消灭缺点,该多好呀......微软是作磁盘操作系统起家的,于是很自然地他们提出了一个非常完美的设计方案,那就是把磁盘文件的管理方式移植到文件中了------复合文件,俗称“文件中的文件系统”。连微软当年都没有想到,就这么一个简单的想法,居然最后就演变出了 COM 组件程序设计的方法。可以说,复合文件是 COM 的基石。下图是磁盘文件组织方式与复合文件组织方式的类比图:

图一、左侧表示一个磁盘下的文件组织方式,右侧表示一个复合文件内部的数据组织方式。

时间: 2024-11-03 16:44:04

COM组件设计与应用(一)起源及复合文件的相关文章

Asp.net组件设计浅论

asp.net|设计 一.什么是组件? 查看MSDN,微软是这样给组件定义的:在 .NET Framework 中,组件是指实现 System.ComponentModel.IComponent 接口的一个类,或从实现 IComponent 的类中直接或间接派生的类.这是从纯语言(技术)角度下的定义,通俗的讲,组件是"可独立运作的软件单元",这里强调独立运作,也就代表着组件必须拥有低耦合性.高重用性等特点.微软将软件划分为两部分:其一是Component,意指具备特定功能.可独立运作.

漫谈Visual C#的组件设计方法

visual|设计 Properties 在C#中为类预定义属性是件再简单不过的事,见程序1. 程序1 using System;namespace PropertiesDemo{ public class MyData { ............... } public class Class1 { private MyData _data; public MyData Data { get { return _data; } } public Class1() { _data = new

COM组件设计与应用(六)——用ATL写第一个组件(vc.net)

一.前言 1.与 <COM 组件设计与应用(五)>的内容基本一致.但本回讲解的是在 vc.net 2003 下的使用方法,即使你不再使用vc6.0,也请和上一回的内容,参照比对. 2.这第一个组件,除了所有 COM 组件必须的 IUnknown 接口外,我们再实现一个自己定义的接口 IFun,它有两个函数: Add()完成两个数值的加法,Cat()完成两个字符串的连接. 3.下面......好好听讲! 开始了:-) 二.建立 ATL 工程 步骤2.1:建立一个解决方案. 步骤2.2:在 该解决

AOP@Work: 用Contract4J进行组件设计-用契约式设计和AspectJ改进软件

简介:契约式设计(Design by Contract)是切实可行的技术,可以阐明组 件 设计的细节.为客户记录正确的组件用法,并用编程的方式测试组件使用的顺应 性(compliance).在 AOP@Work 的最后一篇中,Dean Wampler 介绍 了 Contract4J,这是契约式设计的工具,它用 Java 5 标注 (annotation)指定合约,并在运行时用 AspectJ 方面计算合约.在成为 AOP 工具包中新增的一个举足轻重的工具的同时,Contract4J 迎合了面向方

excel导入导出组件设计

这是我设计的excel导入导出组件,使用Java 编写,通过xml文件的配置,来设置excel到java bean的映射.关键(配置)文件:ExcelModeMappingl.xml. 之前一直为excel的导入导出烦恼,每写一次都感觉是"重复造轮子",代码很繁琐,可移植性特别差.终于下决心写一个可重用性很高的组件,专门解决"重复造轮子"的问题.   xml配置文件名称:ExcelModeMappingl.xml 内容(示例): <?xml version=&

COM组件设计与应用学习1-------复合文档

      最近由于项目的需要 涉及到了 COM技术,所以就进行了以下学习 ,看关于COM方面的书籍不是很多,于是我便从网上学习,本来对COM感觉很神秘,等当真正接触的时候发现也不是那么难,以上扯淡中......兴趣就是动力嘛,本人比较懒,文中部分内容直接COPY原文 作者体谅..      还有COM中都是以接口的形式提供的,Java中大家都学过接口  ,还有C++虚函数中大家都学过 其实都差不多 ,只是COM有自己的内存分配方式而已 .  COM--到底是什么 简单地说,COM是一种跨应用和

sql 业务流程图-SQL课程设计中业务流程图的.bpb.bpm文件是什么,怎么开

问题描述 SQL课程设计中业务流程图的.bpb.bpm文件是什么,怎么开 SQL课程设计中业务流程图的.bpb.bpm文件是什么,怎么开 解决方案 物理模型图 建模用的.PowerDesigner 打开. 解决方案二: 查 百 度

android-第二届“中国软件杯”大学生软件设计大赛赛题 基于安卓的文件浏览与PDF格式转换软件

问题描述 第二届"中国软件杯"大学生软件设计大赛赛题 基于安卓的文件浏览与PDF格式转换软件 想找第二届"中国软件杯"大学生软件设计大赛赛题 基于安卓的文件浏览与PDF格式转换软件源代码或者相关有用代码 解决方案 文件浏览指文件浏览器吗 pdf这个有开源的:FBReader

基于Delphi的组件设计之概念

作为组件制作的开始,应该了解一些概念,我以为这些概念是非常重要的,将可以作为以后实践的理论基础. 一.组件的简要层次结构 一般情况下,VCL的组件可以从Tcomponent为开始.其最明显的特征就是它的属性可以在设计时通过对象察看器来操纵,另外,他还能拥有其他组件. 从Tcomponent下,分出非可视组件和可视组件. 非可视组件如TOPenDialog,TTimer,TTable等,这些组件因为继承自Tomponent,所以也就继承了在设计时可以被操纵的特性. 可视化组件始自TControl,