文档介绍:COM的扩展
潘爱民
2003-11-21
.pCourse2003/
内容
基础
命名服务:moniker
UDT:统一数据传输
基础
Apartment
COM组件
COM客户
{
IXxx *p;
p->…
}
Apartment
proxy
COM库(SCM, )
COM库()
COM库()
Registry
进程A
进程B
机器A
机器B
安全通道
ORPC
双接口
VB客户
回顾:可连接对象的基本结构
结构化存储(structured storage):由来
文件系统的诞生
多个应用程序共享同一个存储设备
文件服务功能的抽象
进展到结构化存储
多个组件共享同一个文件
组件软件存储功能的基本要求
OLE的需求
组件共享句柄方案,如何定位?避免冲突?
文件系统结构
结构化存储
多个组件程序共享一个复合文件
复合文件
文件内部的文件系统
只有两种对象:存储对象和流对象
实现了部分访问和增量访问的功能
流对象
COM库提供实现,实现了IStream接口
class IStream : public IUnknown
{
public :
virtual HRESULT Read (void *pv, unsigned long cb, unsigned long *pcbRead) = 0;
virtual HRESULT Write (void *pv, unsigned long cb, unsigned long *pcbWritten) = 0;
virtual HRESULT Seek (LARGE_INTEGER dlibMove, unsigned long dwOrigin,
ULARGE_INTEGER *plibNewPosition) = 0;
virtual HRESULT SetSize (ULARGE_INTEGER libNewSize) = 0;
virtual HRESULT CopyTo (LPSTREAM pStm, ULARGE_INTEGER cb,
ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten) = 0;
virtual mit (unsigned long mitFlags) = 0;
virtual HRESULT Revert ()= 0;
virtual HRESULT LockRegion (ULARGE_INTEGER libOffset, ULARGE_INTEGER cb,
unsigned long dwLockType) = 0;
virtual HRESULT UnlockRegion (ULARGE_INTEGER libOffset, ULARGE_INTEGER cb,
unsigned long dwLockType) = 0;
virtual HRESULT Stat (STATSTG *pStatStg, unsigned long grfStatFlag) = 0;
virtual HRESULT Clone(LPSTREAM * ppStm) = 0;
};