# Component Objects: C Nested Structures

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;