brew接口定义宏解析

a.#define VTBL(iname)  iname##Vtbl

b.#define QINTERFACE(iname)\

                     struct _##iname{\

                            struct VTBL(iname) *pvt;\

                     };\

                     typedef struct VTBL(iname) VTBL(iname);\

                     struct VTBL(iname)

c.#define INHERIT_IBase(iname)\

              uint32 (*AddRef)(iname *);\

              uint32 (*Release)(iname *)

d.#define INHERIT_IModule(iname)\

              INHERIT_IBase(iname);\

              int (*CreateInstance)(iname *po,IShell *pIShell,AEECLSID ClsId,void **ppObj);\

              void (*FreeResouces)(iname *po,IHeap *ph,IFileMgr *pfm)

e. #define GET_PVTBL(p,iname)       ((iname*)(void*)p)->pvt

 

语句

typedef struct _IModule  IModule;

QINTERFACE(IModule)

{

       INHERIT_IModule(IModule);

};

#define IMODULE_AddRef(p)  GET_PVTBL(p,IModule)->AddRef(p)

 

用宏替换之后:

typedef struct _IModule  IModule;

struct _IModule{

       struct IModuleVtbl *pvt;

};

typedef struct IModuleVtbl IModuleVtbl;

struct IModuleVtbl

{

       uint32 (*AddRef)(IModule *);

       uint32 (*Release)(IModule *);

       int (*CreateInstance)(IModule *po,IShell *pIShell,AEECLSID ClsId,void **ppObj);

       void (*FreeResouces)(IModule *po,IHeap *ph,IFileMgr *pfm);

};

#define IMODULE_AddRef(p)  ((IModule *)(void*)p)->pvt ->AddRef(p)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值