(Translated by https://www.hiragana.jp/)
COM结构化存储 - 维基百科,自由的百科全书 とべ转到内容ないよう

COM结构そん

维基百科ひゃっか自由じゆうてき百科ひゃっかぜん

COM结构そん(也称“OLE结构そん储”)ほろ软在Windows操作そうさけい统上开发てきいち种技术,以在一个文件内存储层次化的数据。严格讲,术语“structured storage”ゆびCOMてきいち套接こう。并提供ていきょうりょう有限ゆうげん形式けいしきてき原子げんしごとえいAtomic transactionかずすえ访问。

结构そん储广泛用于Microsoft Office应用ほどじょただしOffice 2007开始だま使用しようもとXMLてきOffice Open XMLSQL Server使用しよう结构そん储。

がいじゅつ

[编辑]

结构そん储是为了解りょうかい决在一个文件中存放多个数据对象的本质性困难。とうおさむあらため一个对象从而改变其尺寸时,如果这些对象ざいぶんけんない顺序そんてき,则被おさむあらため对象てき尺寸しゃくすん扩大时所有しょゆうざい其后てき对象需要じゅようこうきさきうつり动以腾出そら间,おさむあらため对象缩小尺寸しゃくすん所有しょゆうざい其后てき对象需要じゅようこうぜんうつり动。这样てきこま难有很多种办ほう应对,ただし应用ほどじょ开发しゃ并不希望きぼう处理这样てい层次てき二进制文件格式问题。

结构そん储把ぶんけんけい统的概念がいねん引入いたぶんけん内部ないぶざいぶんけん内部ないぶ构造一个树状层次结构。よしそん储对ぞうりゅう对象构成。节点为根そん储,そん储下めん以有そん储或りゅう对象。そん储下めん以再有子ゆうこそん储或りゅう对象。そん储对ぞう本身ほんみ包含ほうがんしんいき,它是そん储和りゅう对象てき容器ようきりゅう对象かのう节点,すうすえてき载体。

COMせっこう

[编辑]

简介

[编辑]

结构そん提供ていきょうりょういち抽象ちゅうしょうしょう为“りゅう”(stream),ようCOMせっこうIStream表示ひょうじ。一个流在概念上类似一个文件,使用しようIStreamせっこうてき方法ほうほうらい读写。ながれ存在そんざい于内そんちゅうぶんけんちゅうある其它りゅうちゅう。另外いち个重よう抽象ちゅうしょう“storage”,表示ひょうじ为COMせっこうIStorageいち个storageざい概念がいねんじょう类似于文けんけい统的录。Storage包含ほうがんりゅうある其他storages。

一个应用程序如果要把几个数据对象保存到一个文件中,一种办法是打开一个IStorage表示ひょうじぶんけんしかきさき ごと个对ぞうそんにゅう单独てきIStream(这可どおり过标じゅんCOMせっこうIPersistStream)。

结构そん储的ごと务机せい,针对うつししき而不读模しき。创建、开存储和りゅう时可以指定していごと务模しきただゆうCommitきさき所有しょゆうてき变化ざいひさげ交到じょう级。revert以恢复到うえcommit以来いらいてきじょう态。こと务的实现ざいないそんちゅうある临时ぶんけんちゅう保存ほぞんぶんけん拷贝てき方式ほうしきこと务可以嵌套。

增量ぞうりょう访问,以减しょう保存ほぞんぶんけんてき操作そうさ时间。对于ぶんけん碎片さいへん,调用そん储CopyToかい决。

IStreamせっこう

[编辑]
  class IStream::public IUnknown 

方法ほうほう

   Read
   Write
   Seek
   CopyTo
   Commit 所有しょゆう变化ひさげ交到包容ほうよう该流对象てきそん储对ぞう。
   Revert   rollback取消とりけしうえつつみ以来いらいてき所有しょゆう操作そうさ。针对ごと务模しきてきりゅう

IStorageせっこう

[编辑]
   class IStorage:public IUnknown  
   CreateStream 
   OpenStream 操作そうさりゅう对象,かえしかいIStreamせっこうゆび针
   CreateStorage 
   OpenStorage 操作そうさそん储对ぞうかえしかいIStorageせっこうゆび针
   EnumElements まい所有しょゆうてきりゅう对象和子わこそん储对ぞう。
   commit
   Revert。针对ごと务模しきてきそん储。
   Stat 获取そん储对ぞうてきCLSID标识
   SetClass 为存储对ぞう赋一个CLSID标识,并可どおり过Stat函数かんすう获取此CLSID值。つう过此CLSID值把そん储对ぞうあずか一段可执行代码联系起来,とうきゃく户程じょ希望きぼう执行あずかそん储对ぞうしょう联系てきだい码时,它利用りようCLSID值,并调よう CoCreateInstamce函数かんすう创建いち个COM对象,さいそん储对ぞう交给COM对象,ゆかり它处そん储对ぞう

Windows API函数かんすうよう于CLSIDゆう操作そうさ

[编辑]
  • WriteClassStgReadClassStg函数かんすうふうそうりょう IStorage::SetClassIStorage::Statなり员函すう完成かんせいそん储对ぞうてきCLSIDてき设置获取操作そうさそん储对ぞうただ个容,它本身ほんみ包含ほうがんすうすえしんじいき所以ゆえん它的CLSIDしんいきうつしざい其下めんてき一个子流对象中,其名字みょうじ为“\x01CompObj”。
  • WriteClassStmReadClassStm函数かんすう使用しよう一致的格式在流对象的当前位置分别写或者读CLSIDしんいき通常つうじょうじょう况下,ざいりゅうてきおこりはじめ放置ほうちCLSIDしんいき
  • GetClassFile函数かんすうかえしかい一个与给定文件相联系的CLSID。Windows利用りようCLSIDすうすえぶんけんあずか应用ほどじょ联系おこりらい

复合二进制文档

[编辑]

Microsoft实现てき一种称为复合二进制文档(Compound File Binary Format,简称“复合ぶん档”)てきCOM结构そん储,广泛よう于结构化そん储实现。使用しよう类似于FATてき结构表示ひょうじそん储与りゅうぶんけんへん(chunk)しょう为扇(sector)按需分配ぶんぱい给新てきりゅうある增加ぞうか尺寸しゃくすんてきりゅう。如果りゅう删除あるおさむ尺寸しゃくすんさい需要じゅようてきおうぎ以重しん其他りゅう使用しよう

使用しよう复合二进制文档的应用程序有:

LockBytes对象

[编辑]

LockBytes对象所有しょゆうそん储介质的いち抽象ちゅうしょうそん储介质描じゅつしょう一般いっぱんてき节流,LockBytes对象负责从字节流ちゅう写字しゃじ节。复合ぶん档通过一个被称为“LockBytes”てき对象,そん储与そこ层的そん储介质联けいおこりらい,其他てき对象则通过根そん储与そこ层存储介质进ぎょうすうすえ通信つうしん,从而实现りょうせい个结构化そん储体けい结构。复合ぶん档通过LockBytes对象そん储对ぞうあずかそこ层的ぶんけん操作そうさへだた离开らいざい访问そん储对かたどあるものりゅう对象时避开了ぶんけん句柄くがら操作そうさ

LockBytes对象实现りょうILockBytesせっこう提供ていきょう基本きほんてき读写操作そうさ。COM库提供ていきょうりょうかけしょうてきもと于文けん句柄くがらてきLockBytes对象,以及もと于内そんてきLockBytes对象。

れい如,按照如下骤创たてはじめ于内そんてき复合ぶん档。

  1. GlobalAlloc()获得いち个内そん句柄くがら
  2. CreateILockBytesOnHGlobal()创建いち个LockBytes对象。这步类似于GlobleLock()
  3. StgCreateDocfileOnILockBytes()创建一个基于指定的LockBytes对象てき复合ぶん

其他方法ほうほう

  • 使用しようStgCreateDocfile()创建一个基于磁盘文件的复合文档。
  • StgCreateDocfileOnLockBytes()
  • 使用しようStgOpenStorage()开一个基于磁盘文件的复合文档
  • 使用しようStgOpenStorageOnILockBytes()开一个基于内存的复合文档
  • GetHGlobalFromILockBytes
  • CreateStreamOnHGlobal
  • GetHGlobalFromStream
  • StgIsStorageFile
  • StgSetTimes

永久えいきゅう对象

[编辑]

概念がいねんじょう永久えいきゅう对象あずかそん储对ぞうりゅう对象ぼつゆう联系。永久えいきゅう对象以把じょう态信いきそん储下らい,以后以重けん这样てき对象,且恢复到以前いぜんてきじょう态。以很方便ほうべん使用しようCOMてき结构そん储机せいある别的つくえせい(如磁盘文けんけい统注さつひょうもく录服务,すうすえ库服务等)らい保存ほぞん永久えいきゅう对象てきじょう态。

COMてい义了四个常用的永久接口:IPersistStorage, IPersistStream, IPersistStreamInit IPersistFile。ぜん三个接口使用的结构化存储机制。きさき一个接口直接使用文件。せっこう包含ほうがんさん基本きほん函数かんすう

  • IsDirty:反映はんえいりょううえ保存ほぞんきさきいやおさむあらため
  • Load:从存储介质中そうにゅう永久えいきゅう对象てきじょう态数すえ
  • Save:永久えいきゅう对象てきじょう态数すえ保存ほぞんいたそん储介质中
やめかくれぞう部分ぶぶん翻譯ほんやく内容ないよう歡迎かんげい參與さんよ翻譯ほんやく

Native Structured Storage

[编辑]

During the beta testing phase of Windows 2000, it included a feature titled Native Structured Storage (NSS) for storage of Structured Storage documents (like the binary Microsoft Office formats and the thumbs.db file Windows Explorer uses to cache thumbnails) with each Stream that makes up a document stored in a separate NTFS data stream. It included utilities that automatically split up the streams in a regular Structured Storage document into NTFS data streams and vice versa. However, the feature was withdrawn after Beta 3 due to incompatibilities with other OS components, and any NSS files automatically converted to the single data stream format.[1]

类似こうのう产品

[编辑]

参考さんこう文献ぶんけん

[编辑]
  1. ^ What is Native Structured Storage?. [2007-12-03]. (原始げんし内容ないようそん档于2007-09-27). 

外部がいぶ链接

[编辑]