Voici la construction pour créer des struct
qui contiennent des fonctions membres :
// Déclaration en avant d'une struct
struct ITest;
// Type fonctions à utiliser (accesseur/mutateur d'1 membre)
typedef void SetVarPtr(ITest*, long);
typedef long GetVarPtr(ITest*);
// Structure contenant les pointeurs sur les fonctions
typedef struct
{
SetVarPtr* SetVar;
GetVarPtr* GetVar;
} IVtbl;
// Une interface ITest
typedef struct
{
long lVar;
IVtbl* lpVtbl;
} ITest;
// Les fonctions
void SetVar(ITest* This, long lg)
{
This->lVar = lg;
}
long GetVar(ITest* This)
{
return This->lVar;
}
// Initialise table des pointeurs vers les fonctions réelles
static const IVtbl IVtblObject = {SetVar, GetVar};
// Déclare, alloue et rempli l'interface
ITest* pTestStruct;
pTestStruct = (ITest*)GlobalAlloc(GMEM_FIXED, sizeof(ITest));
pTestStruct->lpVtbl = &IVtblObject;
pTestStruct->lVar = 0;
// On appelle les fonctions qui accèdent au membre de la struct
pTestStruct->lpVtbl->SetVar(pTestStruct, 0x0a000000);
long lvalue = pTestStruct->lpVtbl->GetVar(pTestStruct);
// Libère
GlobalFree((HGLOBAL)pTestStruct);