2014-07-16 21:53:19|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:CAA, CATIA|来源:唯设编程网
一个数据扩展是一个包含数据成员和方法的C++类。设想我们的对象MyObject已经被多个客户使用,而我们又想添加这个对象没有的新数据成员。如果我们提供一个我们新版本的对象,这个对象为这个数据实现了一个额外的接口,客户为了获得一个新功能将会非常高兴,但是当我们告诉他们即使他们不使用这个接口也需要重新编译他们的应用程序时,他们也许会不高兴。为了客服这个问题,我们可以按照如下方式使用一个数据扩展:
图 3: 一个由一个实现和一个数据扩展类构成的组件
新接口CATIData通过独立的C++类MyDataExtension实现,该接口包含读取数据和用于存储它们的数据成员的方法。当你分发数据扩展时没有必要重新编译客户应用程序,因为从这些应用程序的角度来看,MyObject类没有更改。仅仅想要使用这个更新的客户应用程序需要修编并重新编译。
生命周期(Lifecycle):为返回一个被某个对象的一个数据扩展所实现的接口 ,在这个对象上调用QueryInterface方法会创建数据扩展实例,或者使用已经存在的对象实例。这个数据扩展仅仅在扩展对象也被删除时才被删除,即在所有这个对象和它的扩展的引用计数等于0时才被删除。
与CATIData对应的idl文件如下所示:
// IDL encoded interface
#pragma ID CATIData "DEC:7db286f1-218d-0000-0280020a86000000" interface CATIData : CATBaseUnknown { #pragma PROPERTY Length HRESULT get_Length(out int oLength); HRESULT put_Length(in int iLength); }; |
结果头文件CATIData.h如下所示:
// C++ generated interface class header file #include "CATBaseUnknown.h" extern IID IID_CATIData; class CATIData : CATBaseUnknown { CATDeclareInterface; public : virtual HRESULT __stdcall get_Length(int * oLength) = 0; virtual HRESULT __stdcall set_Length(int iLength) = 0; }; |