结构化存储-复合文档-永久对象

这几天又复习了一下去年学习的COM知识,总算是稍许理解了COM扩展中的结构化存储、复合文档和永久对象机制。

一、结构化存储的核心概念

        结构化存储在文件系统基础之上,又建立了一个存储系统,具体来说,是在普通文件内建立了一套存储系统(结构)。文件系统可以看成是一棵树,树上有子结点,子结点可以使文件或目录,而每个目录又是棵子树,子树下面也有文件或目录。结构化存储系统与文件系统极其相似,只不过它以单个普通文件作为介质,也就是说可以在一个磁盘文件内建立一个结构化存储系统(结构)。结构化存储结构也可以抽象成一个树形层次结构,在这棵树上有两种节点:存储对象(storage object)和流对象(stream object)。对应于文件系统,存储对象好似目录,流对象好似文件;同样的,存储对象如目录一样不包含数据,只包含此存储对象所包含的子存储对象及流对象信息,数据则由流对象保存。最后,结构化存储结构中还有一个根存储对象(root storage object),也就是树形层次中的根。

二、结构化存储的实现——复合文档技术

        前面只是介绍了COM结构化存储的概念或规范,不像COM基本规范(只给出规范没有给出具体实现),COM也实现了结构化存储。这一机制就是复合文档技术,具体来说,COM实提供了IStorage和IStream接口,用以实现结构化存储。我们可以简单的调用StgCreateDocFile或StgCreateStorage(Ex)来建立复合文档,通过IStorage和Istream接口创建存储对象和流对象,从而构建整个存储结构。另外,IStorage和IStream接口还提供了读取数据,枚举存储对象、流对象,删除对象,获取对象CLSID等方法。

三、机构化存储的意义

        这一点,目前还没有什么感受。我查阅了一些COM的书籍,大都认为结构化存储使得COM组件访问数据信息更为方便。不同的组件的数据信息可以存在一个复合文件中,而读写时却互不干扰。(还有什么作用或意义,请您也一同指出来)

四、永久对象

         a、什么是永久对象,为什么要实现永久性

          首先,由名字可以知道这是一个对象,具体的说是个COM对象(即要使COM对象具有久性质)。为什么一个COM对象要实现永久性质?那是因为许多COM对象都有一些属性或状态信息,在使用该COM组件完以后可能以后还要继续使用,这时,COM对象的属性或状态信息就需要维护好。

           b、怎样实现永久性

           要实现COM对象的永久性,当然要保存好对象的状态信息,保存到那里?同样COM也为开发人员实现了永久接口。根据状态信息存储的介质不同,提供了四个永久接口:IPersistStorage、IPersistStream、IPersistFile、IPersistStreamInit,这四个接口提供了读写COM对象状态信息的方法。

            c、如果你的COM对象要求具有永久性,只需要让你的对象实现IPersistXXX接口即可,这还不简单嘛?

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值