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

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值