初學brew時,最煩人的就是介面的定義了,一大堆的巨集,讓人不知所云。這裡,將以helloworld為例,我們一步一步揭開它的神秘面紗。
typedef
struct
_helloworld
helloworld;
typedef
struct;
struct ;
declare_vtbl
()又是什麼?
它的巨集定義為:
#define
declare_vtbl
(iname) iname
vt##
iname;
解開後為
struct ;
在aee.h中找到如下**:
typedef
struct;
#define
(iname) /
inherit_ibase
(iname); /
boolean
(*handleevent
)(iname *
po,
aeeevent
evt,
uint16
wp,
uint32
dwp)
qinte***ce()
;#define (p
)
get_pvtbl(p
,)->
addref(p
) #define (p
)
get_pvtbl(p
,)->
release(p
) 還是看看解開後是什麼吧:
};
; 至於巨集定義
#define (p
)
get_pvtbl(p
,)->
addref(p
) 展開來後則成了:
#define (p
(*)malloc
(nsize
+ sizeof())
如#define (p
這一段**如下:
= (*)((
byte
*)pme
+ nsize
//initialize the individual entries in the vtbl
->
addref
= ; //實際的addref函式位址
->
release
= ;//實際的release函式位址
->
handleevent
= ;//實際的handleevent位址
init_vtbl
(pme
, , *
);
巨集展開再看看:
由此我們可以看到,在brew中,所謂的介面,不過是乙個指標,不同型別的介面的指標指向了不同的的函式指標表,可以理解為c++中的vtbl。
對於某一介面的的例項,它的第乙個變數就是指向vtbl的指標,一般來講,它的vtbl表是存在這個類例項的尾端的。在這個類初始化時,必須同時對它的vtbl也要初始化。
收錄 深入BREW訊息處理機制
訊息處理機制,即event driven和傳統的程式設計機制不同,如dos,unix下的c程式設計,他沒有main loop,程式的流程不是順序執行的。有過window程式設計經歷的讀者都會清楚這種機制。switch ecode return true case evt key imenu hand...
BREW的事件機制,BREW中的設計模式
brew的事件機制 2007 03 08 10 47 a.m.brew中的handle event函式都是boolean返回型別的,這是為了實現事件處理的層次機制,當該層上的handle event沒有處理該事件時,應該返回false,以便上層對該事件感興趣的handle event來處理。如果處理...
BREW開發教程 4 BREW訊息處理機制
uint32 dwparam 第三和第四分別為16位和32位與事件相關的資料,這些值是與具體的事件相關的。鍵盤事件描述 evt key press evt key release evt key 在對話方塊中通過方向鍵來移動游標的方向取決於哪種控制項具有焦點以及使用者按了哪個方向 上 下 左 右 鍵...