- 質問:VMTとは?
- 回答:C言語版では構造体を使用して、C++言語版と同様にクラス構造を構成しています。
関数ポインタをもつ構造体とその関数ポインタおよび属性を持つグローバルデータ構造体をC言語版ではクラスとして 扱っており、これをVMT(Virtual Method Table)と呼んでいます。
VMTの関数テーブルはヘッダファイル内に宣言されており、テーブル内の関数を呼び出すには以下のように記載します。
GWGetVmt( VMT名称 , パネル/ウィンドウのポインタ )->Method((void*)パネル/ウィンドウのポインタ);
GWGetVmtは、VMT名称 , パネル/ウィンドウのポインタを引数として与えることで関数テーブルの先頭を返します。
■例:ピクチャコントロールのポインタ取得
ポインタを取得する場合、C++言語版ではクラス内のGetChild関数を使用しますが、C言語版ではVMT内のGetChild関数を使用します。
- C++言語版の場合
GCPicture *pPicture = (GCPicture*)GetChild(GPICTURE00000); - C言語版の場合
GPicture *pPicture = (GPicture *)GWGetVmt(GPanel_VMT,pSelf)->
GetChild(pSelf,GPANEL0000_GPICTURE00000);