2014-07-16 21:53:19|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:CAA, CATIA|来源:唯设编程网
TIE是CAA V5所提倡的用于在运行时处理接口的技术。然而,在一些性能非常关键场合中,实例化一个中间对象也许会花费较大的代价。比如,如果一个组件被实例化成千上万次,并且一个指向给定接口的指针在每次组件实例化时均被请求,成千上万个TIE对象被创建,可能引起内存分配问题。为了避免这个问题,CAA V5建议使用一种替代方案:BOA。
BOA代表Basic Object Adapter的缩写。BOA技术使QueryInterface返回一个实现接口的对象指针,而不是指向中间类的一个指针。在如上面说描述的情形中,BOA保存每个组件类的一个实例。即使一个指向实现类的指针被返回,它也被作为接口指针返回,并且在接口和实现之间没有TIE那么多联结。客户应用程序并不知道哪一个类实现了这些接口,不存在链接它的头文件或者模块的编译时间,因而仅仅调用被这个接口暴露的方法。
为了使用BOA代替TIE实现CATIData:
#include "CATIData.h"
class MyDataExtension : public CATIData { CATDeclareClass; public : MyDataExtension(); virtual ~MyDataExtension(); virtual HRESULT __stdcall get_Length(int * oLength); virtual HRESULT __stdcall set_Length(int iLength); private : int _Length; }; |
... CATImplementClass(CAAEDataExtension, // Extension class name DataExtension, // Data extension CATIData, // Always OM-derive BOA extensions from the BOA implemented interface MyObject); // Implementation class of the extended component
CATImplementBOA(CATIData, CAAEDataExtension); ... |