COM结构化 存 储
COM结构
结构
概 述
[编辑]结构
结构
COM接 口
[编辑]简介
[编辑]结构IStream
IStream
IStorage
。
一个应用程序如果要把几个数据对象保存到一个文件中,一种办法是打开一个IStorage
以IStream
(这可IPersistStream
)。
结构
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把 数 据 文 件 与 应用程 序 联系起 来 。
复合二进制文档
[编辑]Microsoft实现
- Microsoft Office 97–2003
文 档:- Word
文 档(.DOC, .DOT) - Excel spreadsheets (.XLS, .XLT)
- PowerPoint presentations (.PPT, .POT)
- Publisher
文 件 (.PUB) - Visio
文 件 (.VSD) - Project
文 件 (.MPP) - Microsoft PhotoDraw
文 件 (.MIX) - Microsoft Outlook
文 件 (.MSG)
- Word
- Windows Installer
文 件 (.MSI, .MSP, .MST) - Microsoft Picture It! / Microsoft Digital Image
文 件 (.MIX) - Internet Explorer RSS Feeds Windows RSS Platform
文 件 (.feed-ms) - Windows 7 StickyNotes (.SNT)
- Windows 7 jumplists
文 件 - Thumbs.db
- Microsoft SQL 2000 Server DTS packages
LockBytes对象
[编辑]LockBytes对象
LockBytes对象实现
- GlobalAlloc()获得
一 个内存 句柄 - CreateILockBytesOnHGlobal()创建
一 个LockBytes对象。这步类似于GlobleLock() - StgCreateDocfileOnILockBytes()创建一个基于指定的LockBytes对象
的 复合文 档
其他
使用 StgCreateDocfile()创建一个基于磁盘文件的复合文档。- StgCreateDocfileOnLockBytes()
使用 StgOpenStorage()打 开一个基于磁盘文件的复合文档使用 StgOpenStorageOnILockBytes()打 开一个基于内存的复合文档- GetHGlobalFromILockBytes
- CreateStreamOnHGlobal
- GetHGlobalFromStream
- StgIsStorageFile
- StgSetTimes
永久 对象
[编辑]COM
- 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]
类似功 能 产品
[编辑]- Microsoft .NET:
- Linux:
- GNOME Structured File Library(页面
存 档备份,存 于互联网档案 馆) – Can read Microsoft structured storage files. - POLE.
- GNOME Structured File Library(页面
跨 平台 C++用 于 Window/MacOSX/Linux:- Java:
- POIFS – Java implementation of the OLE 2 Compound Document format, part of Apache POI.
- Perl:
参考 文献
[编辑]- ^ What is Native Structured Storage?. [2007-12-03]. (
原始 内容 存 档于2007-09-27).
外部 链接
[编辑]
|