使用CAA创建接口(Creating Interfaces)

2013-04-23 20:09:37|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++, CAA, 图形/图像, CATIA|来源:唯设编程网

l  #ifndef,#define,和#endif预编译命令包含头文件被重复包含。

l  需要包含CATBaseUnknown头文件,因为CAAIXX接口是一个以C++的方式继承自CATBaseUnknown的抽象类。

l  得益于一个声明为全局外部变量的标识符,所有接口都可以被识别。该标识符必须唯一,将在接口的源文件中进行初始化。

l  接口类必须继承自CATBaseUnknown,或者其他接口类。根据CATIA规则,多重继承是不允许的。

l  宏命令CATDeclareInterface声明该类是一个CATIA接口。

l  方法的特征如下:

¡  所有方法的属性必须为共有(Public),因为所有接口方法都希望被实现。

¡  这些方法必须是纯虚函数,也就是说,接口类不提供这些方法的任何实现。

¡  他们的返回类型必须是HRESULT。该类型是一个标准微软返回代码,用于满足OLE准则。

¡  他们必须使用_stdcall调用习惯。这是一种微软对C++编译器的扩展,同样用于使接口符合OLE准则。

¡  他们可以含有参数,这些参数通常是指向其他接口的指针。

接口源文件

CAAIXX接口的源文件如下:

 

#include "CAAIXX.h“



IID IID_CAAIXX = {

  0x7c1b4ba8,

  0x5c25,

  0x0000,

  {0x02, 0x80, 0x02, 0x0b, 0xcb, 0x00, 0x00, 0x00} };



CATImplementInterface(CAAIXX, CATBaseUnknown);
各部分的功能描述如下:

CAA接口定义

这些功能包括:

l  包含CAAIXX头文件是为了获得IID的声明和引入CATBASEUnknown头文件。

l  接口的IID被初始化为一个全世界唯一的确定值。IID也被称之为GUID,代表全球唯一标识(Global Unique Identifier).

l  CATImplementInterface宏命令声明CAAIXX以对象模式派生(OM-derives)自CATBaseUnknown。接口通常必须对象模式派生(OM-derives)自CATBaseUnknown。

当然,在该类中不用实现被声明为虚函数的纯虚函数。

在所有CATIXX的方法中,三个继承自IUnknown接口的方法,从这个接口派生出CATBaseUnknown类,这对一个接口承担着特殊的功能。

1)        QueryInterface从另一个指向其他被同一个对象实现的接口指针返回一个指向接口的指针。

2)        AddRef向该接口的计数器添加引用。

3)        Release从计数器中移除引用。

QueryInterface允许在同一个组件实现的各接口之间漫游,同时AddRef和Release允许组件生命周期管理。

接口TIE

第三个文件为了创造通过代码编译命令mkmk生成接口TIE的请求,这个文件是TIE_CAAIXX.tsrc文件,该文件简单地包含一条指向CAAIXX.h的include语句。

 

#include "CAAIXX.h"
TIE不是对象模型概念的部分。它是一个必要的实现细节。为了将接口从它们的实现中分离出来,一个TIE对象实例在运行时被创建为一个中间对象,该中间对象实现使用该接口的组件(保存了一个指向该接口的指针)和实现了这个接口的组件之间的连接。也就是说,它包含那些运行这个接口声明的方法的代码。接口指针事实上是一个由QueryInterface方法返回并且指向一个TIE对象实例的指针。TIE对象重定向接口方法调用到实现了该接口的组件。

无论接口头文件在什么地方,TIE文件都默认被创建在ProtectedGenerated文件夹中。为了在PutlicGenerated文件夹中创建它,在tsrc文件中添加关键词//public,如下所示:

 

# include "CAAIXX.h"

//public
IUnknown和CATBaseUnknown

所有接口和所有实现接口的基类是CATBaseUnknown,这是一个由CATIA提供的类。CATBaseUnknown派生自IUnknown接口,该接口在UNIX环境由CATIA提供,在Windows环境有微软组件对象模型(COM)提供。IUnknown接口如下所示:

 

interface IUnknown

{

  virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppv) = 0;

  virtual ULONG __stdcall AddRef() = 0;

  virtual ULONG __stdcall Release() = 0;

};
在CAAIXX的方法中,这三个方法继承自IUnknown扮演者特殊的角色:
发表评论0条 】
网友评论(共?条评论)..
使用CAA创建接口(Creating Interfaces)