brew 中的接口机制

来源:互联网 发布:3d打印算法arduino 编辑:程序博客网 时间:2024/04/28 08:10

接口是一个很广泛使用的概念,在 C++ 里面是纯虚函数,在JAVA里面就是interface,而在在brew里面也有类试的接口机制.
我们看一个最简单的写屏幕的例子.
IIMAGE_Draw(pImg, nPosX, nPosY);  
在头文件里面找到,
#define IIMAGE_Draw(p,x,y)                   GET_PVTBL(p,IImage)->Draw(p,x,y)
其中GET_PVTBL 是一个宏,展开后可以看到      
#define GET_PVTBL(p,iname)       ((iname*)p)->pvt
其实就是把我们传进去的p,强转成IImage 指针, 所以
IIMAGE_Draw(pImg, nPosX, nPosY); 就可以等价于 ((IImage*)pImg)->pvt->Draw(p,x,y)
这个pvt又是什么呢,继续查看IImage指针的定义 typedef struct _IImage IImage ,IImage 是一个伪类型,那么_IImage的结构是怎样的.
在AEEIMage.h 这个头文件里面我们看到下面一些语句:
QINTERFACE(IImage)
{
   DECLARE_IBASE(IImage)

   void        (*Draw)(IImage * po, int x, int y);
   void        (*DrawFrame)(IImage * po, int nFrame, int x, int y);
   void        (*GetInfo)(IImage * po, AEEImageInfo * pi);
   void        (*SetParm)(IImage * po, int nParm, int p1, int p2);
   void        (*Start)(IImage * po, int x, int y);
   void        (*Stop)(IImage * po);

   // Extended methods...

   void        (*SetStream)(IImage * po, IAStream * ps);
   boolean     (*HandleEvent)(IImage * po, AEEEvent evt, uint16 wParam, uint32 dwParam);
   void        (*Notify)(IImage * po, PFNIMAGEINFO pfn, void * pUser);
};

QINTERFACE 也是一个宏(怎么这么多宏)
#define QINTERFACE(iname) /
struct _##iname {/
  struct VTBL(iname)  *pvt;/
};/
原来_IImage 的结构是在这里定义啊,它定义了一个pvt的指针,在上文用到,它指向的是一个虚表,而这个虚表就是一个结构体,
里面的内容就是下面的那些函数指针.而在IImage初使化的时候把对于的函数指针和实际的函数定义相关联,
所以在((IImage*)pImg)->pvt->Draw(p,x,y) 的时候实际上是调用了函数指针指向的Draw方法.


 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 贴膜里面有灰尘怎么办 贴膜边缘不粘怎么办 贴膜时候的气泡怎么办 贴手机膜起泡了怎么办 手机膜起泡泡了怎么办 手机膜鼓起来了怎么办 贴膜中间有气泡怎么办 新车贴膜有气泡怎么办 贴手机膜进灰尘怎么办 贴手机膜有灰尘怎么办 华为mate10后机壳碎了怎么办 手机屏和壳分开了怎么办 oppoa33手机开不了机怎么办 7p背面刮花了怎么办 oppo手机左右两键失灵怎么办 苹果5s屏幕翘起怎么办 0pp0手机有点卡怎么办 手机用久有点卡怎么办 手机有点卡怎么办魅蓝 苹果6排线接反了怎么办 oppo手机解锁密码忘了怎么办 魅蓝5音量小怎么办 魅蓝5密码忘记了怎么办 魅蓝note3锁定了怎么办 魅族mx5系统铃声没有了怎么办 魅族主板坏了怎么办 魅族mx5螺丝滑丝怎么办 魅族魅蓝e手机被锁了怎么办 魅蓝e被锁机了怎么办 魅蓝3s卡顿怎么办 魅族note5玩王者荣耀卡怎么办 魅族手机内存不够怎么办 魅族手机音量小怎么办 魅族mx5指纹解锁失灵怎么办 魅族手机费电快怎么办 魅族mx4pro玩王者荣耀卡怎么办 魅蓝5s玩游戏卡怎么办 魅蓝s6玩游戏卡怎么办 OPPO王者荣耀对局闪退怎么办 魅族手机太慢怎么办 魅蓝5信号不好怎么办