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;