COM結構化存儲(也稱“OLE結構化存儲”)是微軟在Windows作業系統上開發的一種技術,以在一個檔案記憶體儲層次化的數據。嚴格講,術語“structured storage”是指COM的一套接口。並提供了有限形式的原子事務數據訪問。
結構化存儲廣泛用於Microsoft Office應用程式。但從Office 2007開始默認使用基於XML的Office Open XML。SQL Server也使用結構化存儲。
基本介紹
- 中文名:COM結構化存儲
- 外文名:COM Structured Storage
- 也稱:OLE結構化存儲
- 領域:計算機
概述
COM接口
簡介
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有關操作
- WriteClassStg和ReadClassStg函式封裝了 IStorage::SetClass和IStorage::Stat成員函式,可以完成存儲對象的CLSID的設定和獲取操作。存儲對象只是個容器,它本身不包含數據信息,所以它的CLSID信息被寫在其下面的一個子流對象中,其名字為“\x01CompObj”。
- WriteClassStm和ReadClassStm函式使用一致的格式在流對象的當前位置分別寫或者讀CLSID信息。通常情況下,在流的起始處放置CLSID信息。
- GetClassFile函式返回一個與給定檔案相聯繫的CLSID。Windows利用CLSID把數據檔案與應用程式聯繫起來。
複合二進制文檔
- Word文檔(.DOC, .DOT)
- Excelspreadsheets (.XLS, .XLT)
- PowerPointpresentations (.PPT, .POT)
- Publisher檔案(.PUB)
- Visio檔案(.VSD)
- Project檔案(.MPP)
- Microsoft PhotoDraw檔案(.MIX)
- Microsoft Outlook檔案(.MSG)
LockBytes對象
- GlobalAlloc()獲得一個記憶體句柄
- CreateILockBytesOnHGlobal()創建一個LockBytes對象。這步類似於GlobleLock()
- StgCreateDocfileOnILockBytes()創建一個基於指定的LockBytes對象的複合文檔
- 使用StgCreateDocfile()創建一個基於磁碟檔案的複合文檔。
- StgCreateDocfileOnLockBytes()
- 使用StgOpenStorage()打開一個基於磁碟檔案的複合文檔
- 使用StgOpenStorageOnILockBytes()打開一個基於記憶體的複合文檔
- GetHGlobalFromILockBytes
- CreateStreamOnHGlobal
- GetHGlobalFromStream
- StgIsStorageFile
- StgSetTimes
永久對象
- IsDirty:反映了自上次保存後是否被修改
- Load:從存儲介質中裝入永久對象的狀態數據
- Save:把永久對象的狀態數據保存到存儲介質中