COM 组件设计与应用(一)起源及复合文件
敬业的IT人
互联网
佚名
2008-1-3 19:18:24
图一、左侧表示一个磁盘下的文件组织方式,右侧表示一个复合文件内部的数据组织方式。
图二、运行示例程序一后,使用 DFView.exe 打开观察复合文件的效果图
示例二:打开一个复合文件,枚举其根存储下的所有对象。
#include // ANSI、MBCS、UNICODE 转换 void SampleEnum() { // 假设你已经做过 COM 初始化了 LPCTSTR lpFileName = _T( "c:\\a.stg" ); HRESULT hr; IStorage *pStg = NULL; USES_CONVERSION; // (注6) LPCOLESTR lpwFileName = T2COLE( lpFileName ); // 转换T类型为宽字符 hr = ::StgIsStorageFile( lpwFileName ); // 是复合文件吗? if( FAILED(hr) ) return; hr = ::StgOpenStorage( // 打开复合文件 lpwFileName, // 文件名称 NULL, STGM_READ | STGM_SHARE_DENY_WRITE, 0, 0, &pStg); // 得到根存储接口指针 IEnumSTATSTG *pEnum=NULL; // 枚举器 hr = pStg->EnumElements( 0, NULL, 0, &pEnum ); ASSERT( SUCCEEDED(hr) ); STATSTG statstg; while( NOERROR == pEnum->Next( 1, &statstg, NULL) ) { // statstg.type 保存着对象类型 STGTY_STREAM 或 STGTY_STORAGE // statstg.pwcsName 保存着对象名称 // ...... 还有时间,长度等很多信息。请查看 MSDN ::CoTaskMemFree( statstg.pwcsName ); // 释放名称所使用的内存(注6) } if( pEnum ) pEnum->Release(); if( pStg ) pStg->Release(); } 查看 进入讨论组讨论。
- 最新文章
- TC(V2.0)使用指南[01-03]
- 确定一个应用程序是否没有响应[01-03]
- C++ Builder 初学问与答(四)[01-03]
- 用Visual C++在单文档界面中创建视图[01-03]
- C++的iostream标准库介绍[01-03]
- 神话与谬误:争论C++前你应当知道什么[01-03]
- 相关文章
- 确定一个应用程序是否没有响应[01-03]
- 递归过程在VB中的应用实例[01-03]
- VB应用程序中用DDE功能开发AutoCADforWindo..[01-03]
- Excel、Access、VB的结合应用[01-03]
- 在VB应用程序中调用Excel2000[01-03]
- VB6在拖托盘中写入应用程序图标[01-03]
