理解使用CAA创建组件(Creating Components)

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和CATImplementBOA宏:

...

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);

...

 
发表评论0条 】
网友评论(共?条评论)..
理解使用CAA创建组件(Creating Components)