`

对brew接口的一些理解

    博客分类:
  • C++
阅读更多
在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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics