程序中的阿呆

经常做做梦,写写工作无关代码
  首页  :: 新随笔  :: 订阅 订阅  :: 管理

摘录--COM+结构化存储

Posted on 2005-10-20 21:15  MicroDream  阅读(300)  评论(0)    收藏  举报
 

  OLE文档是以结构存储方式保存对象的复合文档,它包含两方面的内容:OLE文档服务器和包容器。前者用来创建能够为包容器程序所使用的OLE文档对象,而包容器程序则采取链接或嵌入的方式将服务器合并到自己的文档。对于OLE文档服务器,可分为全服务器和小型服务器。全服务器即可以独立运行,也可以通过链接或嵌入在包容器程序中运行。小型服务器则不能独立运行,且不支持链接,只能以嵌入的方式在包容器程序中运行。包容器程序通过站点对象对这些链接或嵌入的每一个服务器对象进行管理。OLE文档主要包括现场激活、链接与嵌入等主要技术。为便于直观理解,在图1中给出了OLE文档服务体系结构的基本框架。其中主要用到了永久对象、结构化存储(structured storage)、拖放、统一数据传输以及命名与绑定等基本技术。

  结构化存储机制是COM的数据存储的基础,其核心思想是在一个文件内部建立一个类似于文件系统的完整的存储结构,并以存储对象或流对象构成了此类文件系统中树状结构的各个节点,这个包含了类似于文件系统的存储结构的文件也被称为复合文件。存储对象并不存储数据信息,只记录了子存储对象和子流对象的有关信息,其关键接口为IStorage接口,客户程序可以通过该接口对存储对象进行操作。流对象则是进行数据存取的基本对象,通过流对象可以存储各种类型的数据。

流对象的关键接口为IStream接口,通过该接口可以访问流对象并对其存储的数据进行操作。与复合文件建立了连接的COM对象也就是上面所说的永久对象。这种对象可以将状态信息保存到存储对象、流对象或是文件等存储介质中,并能由此重建对象。在客户程序中通过永久对象提供的永久接口对这些永久对象的状态信息进行维护管理。COM定义的常用的永久接口有IPersistStorageIPersistStreamIPersistStreamInitIPersistFile。包括以上四个永久接口在内的所有永久接口都包含IsDirty()、Load()和Save()这三个基本成员函数(对于不同的永久接口这几个函数的参数可能有所区别)。IsDirty()函数可以检查自上次保存状态操作后对象的状态信息是否被修改过。Load()和Save()分别用于从存储介质装入状态数据和将状态数据写入到存储介质。