2014-07-16 21:53:19|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:CAA, CATIA|来源:唯设编程网
CATImplementClass宏声明了类CAAEDataExtension是一个数据扩展,是对MyObject类进行扩展。第三个参数声明当前的组件OM派生(OM-derives)自哪一个对象,这个参数仅仅针对组件的主类有意义,对于一个扩展类通常被设置成CATBaseUnknown 。
一个代码扩展时一个仅仅包含方法,而没有数据的扩展。无论这个代码扩展的主对象存在多少个,一个给定的代码扩展类在运行时仅仅存在一个该代码扩展的实例。
和数据扩展类似,当代码扩展向客户提交时不需要重新编译客户应用程序。
你使用与数据扩展类似的方法对一个代码扩展进行编码,在代码扩展类的源文件中仅仅使用CodeExtension替换DataExtension作为CATImplementClass宏的第二个参数。如下所示:
... CATImplementClass(CAAECodeExtension, CodeExtension, CATBaseUnknown, MyObject); ... |
生命周期(Lifecycle):一旦一个给定对象实例被创建,代码扩展将始终不会被删除并且被所有相同对象的实例共用。
共享一个扩展使得多个类实现这个扩展本身实现的所有接口,而不仅仅是如上面关于扩展的内容所展示的一个类。这是实现代码分解、重用以及代码扩展的另一个步骤。
有两种方法可以实现共享扩展。第一种方法是使扩展本身声明哪一个类是一个扩展类。如果已经存在你想要通过在扩展中实现接口添加额外行为的类,这种方式非常方便。你不需要重新编译已经存在的类,仅仅提供扩展类即可。第二种方法是在通过扩展类进行扩展的类中声明扩展支持。如果已经存在一个扩展类并且你想要将它声明为一个新类的扩展,这种方式非常方便。你不需要重新编译扩展类,仅仅提供那个新类即可。
在扩展类的源文件(.cpp)中按照如下方式声明一个扩展类是对多个类的扩展:
CATBeginImplementClass(MyExtensionClassName, // Begin declaration DataExtension, CATBaseUnknown, TheFirstClassIExtend); CATAddClassExtension(TheSecondClassIExtend); CATAddClassExtension(TheThirdClassIExtend); ... CATAddClassExtension(TheLastClassIExtend); CATEndImplementClass(MyExtensionClassName); // End declaration |