|
RealSystem SDK(三) 作者/来源:Real.com |
3.2 建立RealSystem对象 RealSystem组件可使用the C++ new操作符创建对象,为了使对象可传递到其他RealSystem组件,组件应该使用IRMACommonClassFactory。当RealSystem 初始化组件时,向组件传递一个指向系统上下文的指针,组件可使用这个指针调用IRMACommonClassFactory::CreateInstance并创建一个新RealSystem对象。如: m_pClassFactory-CreateInstance(CLSID_IRMABuffer, (void**)&pStringObj); 3.3 使用IUnknown::AddRef和IUnknown::Release 因为RealSystem对象经常被其他RealSystem对象使用,对象必须正确实现引用计数。COM函数 IUnknown::AddRef 和 IUnknown::Release 控制引用计数,从而决定每个对象的生命期。下列规则说明RealSystem组件何时需要AddRef与Release 对象: 下列函数在返回前AddRef对象。当组件用完对象,必须释放。 RMACreateInstance IUnknown::QueryInterface IRMAFileSystemObject::CreateFile IRMAFileSystemObject::CreateDir IRMACommonClassFactory::CreateInstance 如组件接收对象为一个函数的参数,组件必须AddRef该对象。当组件用完对象,必须释放。如组件以C++ new操作符创建一个对象,组件必须AddRef 对象,用完后释放掉。 3.4 异步操作 RealSystem组件异步调用,使用响应接口返回对其调用的数据。例如,文件格式插件通过IRMAFileObject从文件系统插件请求文件数据,文件系统插件然后使用IRMAFileResponse返回所请求的数据。此异步结构允许当文件系统插件准备所请求的数据时文件格式插件执行其他操作。有了RealSystem的异步特性,插件能在其处理数据或等待其它组件响应时处理任何调用。 3.5 使用IRMABuffer创建数据缓冲区Data Buffers IRMABuffer接口允许RealSystem对象创建COM引用管理的数据缓冲区。RealSystem对象通常使用这些缓冲区对象传递数据。例如,文件系统插件通过缓冲对象将流的头数据传递给文件格式插件。创建缓冲对象如下: 通过IRMACommonClassFactory创建IRMABuffer接口 调用IRMABuffer::SetSize 设置缓冲区大小,执行内存分配。 调用 IRMABuffer::GetBuffer 获得指向缓冲对象的指针。 使用 IRMABuffer::Set 向缓冲区写数据。 传递缓冲区指针给其他组件。 用 IUnknown::Release释放缓冲区对象。 当组件收到指向缓冲对象的指针时,调用IRMABuffer::GetSize 得到缓冲区大小,而调用IRMABuffer::Get 读取缓冲区数据。
|
|