C interface implementations comprise data structures nested within the object’s data structure. Each interface structure contains a VTBL pointer as its first member (pVtbl), a pointer to the object (pCObj), and a count of the external references to the interface (m_RefCount). The order of the members in the interface structures is identical, to facilitate code sharing.
typedef struct CObj { ULONG m_ObjRefCount; LPSTORAGE m_pStg; LPOLEOBJECT m_pOleObj; struct CDOC * m_pCDoc; struct InterfaceA { LPVTBL pVtbl; struct CObj * pCObj; ULONG m_RefCount; } m_InterfaceA; struct InterfaceB { LPVTBL pVtbl; struct Obj * pCObj; ULONG m_RefCount; } m_InterfaceB; } COBJ;