VTBL(IWindow) vtbl;

jumpchess1 2010-10-22 09:54:03
摘一段sample的代码:
/***********************************************************************************/
static IWindow * CFileListWin_New(CMediaPlayer * pOwner)
{
CFileListWin * pme;
VTBL(IWindow) vtbl;

MP_IWINDOW_SETVTBL(&vtbl, CFileListWin_Enable, CFileListWin_Redraw, CFileListWin_HandleEvent, CFileListWin_Delete);
...
/***********************************************************************************/

麻烦解释一下这段code的意思.VTBL(IWindow) vtbl;
还有我一直不太清楚VTBL 到底是什么, 这里的
#define VTBL(iname) iname##Vtbl

Brew/C 里面的继承有哪几种途径..

谢谢.
...全文
522 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
欢乐的小熊 2010-11-10
  • 打赏
  • 举报
回复
看一下AEE.h和AEEInterface.h这两个文件,把宏定义都展开一下就明白了。
别人说多少遍也不如自己展开看一遍的效果好。
seas110 2010-11-07
  • 打赏
  • 举报
回复
就是函数指针表.
你把宏展开,就非常明白了.
其实上层,还可以对这个表做扩展,非常灵活
BuleRiver 2010-10-26
  • 打赏
  • 举报
回复
这里的这个

VTBL(IWindow) vtbl;
#define VTBL(iname) iname##Vtbl

可以翻译成:

IWindowVtbl vtbl;

所以你要看IWindowVtbl是什么,应该是一个函数指针的集合,你要实现那些函数。
jumpchess1 2010-10-25
  • 打赏
  • 举报
回复
唉, 大家都太忙了.
yellowhwb 2010-10-22
  • 打赏
  • 举报
回复
#define VTBL(iname) iname##Vtbl
VTBL就是一个宏定义而已,用来定义接口的。
面向对象设计中,接口定义很重要,接口就是定义了一系列的操作,在c为基础的brew中,就是表现为一个函数指针的结构体。下面的struct IWindowVtbl 就是例子,只有函数指针,没有其它数据了,因为 IWindow就是:
struct _IWindow {
struct IWindowVtbl *pvt;
};
就是函数指针堆在一起而已!!



VTBL(IWindow) vtbl;
展开后就是
IWindowVtbl vtbl


#define QINTERFACE(iname) struct _##iname {\
struct VTBL(iname) *pvt; \
};\
typedef struct VTBL(iname) VTBL(iname); \
struct VTBL(iname)
IWindow的定义如下:
typedef struct _IWindow IWindow;

struct _IWindow {
struct IWindowVtbl *pvt;
};
typedef struct IWindowVtbl IWindowVtbl ;
struct IWindowVtbl
{
/*
* Enables/Disables the window. Window controls will not process
* events if the window is disabled.
*/
void (*Enable)(IWindow *po, boolean bEnable);

/*
* Redraws the window if enabled
*/
void (*Redraw)(IWindow *po);

/*
* Handles the events routed to the window
*/
boolean (*HandleEvent)(IWindow *po, AEEEvent eCode, uint16 wParam,
uint32 dwParam);

/*
* Releases the window resources
*/
void (*Delete)(IWindow *po);
};
jumpchess1 2010-10-22
  • 打赏
  • 举报
回复
补充一下, 在 <<深入BREW抽象接口机制 >>
中有说:
brew中,抽象接口其实就是通过Qinterface或者AEEInterface定义了一个包含VTBL的接口,其他就什么都没有了。
这句话是什么意思.

949

社区成员

发帖
与我相关
我的任务
社区描述
为开发者提供高通丰富的解决方案及全面技术下载内容。本版以AI人工智能、WoS移动笔记本、XR、IoT 物联网、Auto 汽车、生成式AI等核心板块组成,为开发者提供一个便捷及高效的学习交流平台。
人工智能物联网机器学习 企业社区 北京·东城区
社区管理员
  • Qualcomm开发
  • csdnsqst0050
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧