对brew接口的一些理解

在brew里有有自己的接口机制,主要是AEE的,有些是可以看到源代码的,一般都是AEE定义接口OEM有源代码实现,很多时候是没有源代码的,brew也支持自己扩展接口,下面说一些我对接口扩展的一些理解。

接口一般都是通过这样的形式定义的:

第一步:定义函数指针

#define INHERIT_IFoo(iname) \ uint32 (*AddRef)(iname*);\ uint32 (*Release)(iname*);\ int (*QueryInterface)(iname *, AEECLSID, void **)此处是定义了一系列的函数指针,供外部接口调用。第二步:定义虚表及虚表结构体struct IFoo{ struct AEEVTBL(IFoo) *VT; void *Data;}这个是调用此接口用户要用到的结构体,其中VT是指向定义的一组函数指针的,Data是指向用户的数据的。第三步:生效(in my opinion)AEEINTERFACE_DEFINE(IFoo)这个是brew给的接口,看看api的解释吧:Uses an INHERIT_iname() macro and AEEINTERFACE() to define a standard BREW interface.大概的意思就是定义一组接口。有的人会问那函数是在那里实现的呢?刚才不是定义了AEEVTBL(IFoo)这样一个结构体吗?下面的使用就和结构体的使用类似了,例如:static AEEVTBL(IFoo) Funcs = {AddRef,//函数Release,//函数QueryInterface,//函数};Uint32 AddRef(void* po){}Uint32 Release(void *po){}Int QueryInterface(void *po,int clsid,void **ppi){}这样函数就实现了,再下来就是让他们关联起来:IFoo *pIFoo;pIFoo->VT = Funcs;这样就OK了。第四步:外部调用接口

这个就简单了,一组define就搞定的

#define Interface_AddRef(pMe) pMe->VT-> AddRef(pMe)

#define Interface_ Release(pMe) pMe->VT-> Release(pMe)

#define Interface_ QueryInterface(pMe,wparam,ppMe)

pMe->VT-> QueryInterface(pMe,wparam,ppMe)

这样接口的定义就完成了。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chenmeimei_8899/archive/2009/03/11/3977538.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值