/*** Autogenerated by WIDL 0.1 from oaidl.idl - Do not edit ***/
#include <rpc.h>
#include <rpcndr.h>

#ifndef __WIDL_OAIDL_H
#define __WIDL_OAIDL_H
#ifdef __cplusplus
extern "C" {
#endif
#include "objidl.h"
typedef struct IDispatch IDispatch;
typedef struct ITypeInfo ITypeInfo;
typedef struct ITypeLib ITypeLib;
typedef struct IRecordInfo IRecordInfo;
typedef CY CURRENCY;

typedef struct tagSAFEARRAYBOUND {
    ULONG cElements;
    LONG lLbound;
} SAFEARRAYBOUND, *LPSAFEARRAYBOUND;

typedef struct _wireVARIANT *wireVARIANT;

typedef struct _wireBRECORD *wireBRECORD;

typedef struct _wireSAFEARR_BSTR {
    ULONG Size;
    wireBSTR *aBstr;
} SAFEARR_BSTR;

typedef struct _wireSAFEARR_UNKNOWN {
    ULONG Size;
    IUnknown **apUnknown;
} SAFEARR_UNKNOWN;

typedef struct _wireSAFEARR_DISPATCH {
    ULONG Size;
    IDispatch **apDispatch;
} SAFEARR_DISPATCH;

typedef struct _wireSAFEARR_VARIANT {
    ULONG Size;
    wireVARIANT *aVariant;
} SAFEARR_VARIANT;

typedef struct _wireSAFEARR_BRECORD {
    ULONG Size;
    wireBRECORD *aRecord;
} SAFEARR_BRECORD;

typedef struct _wireSAFEARR_HAVEIID {
    ULONG Size;
    IUnknown **apUnknown;
    IID iid;
} SAFEARR_HAVEIID;

typedef enum tagSF_TYPE {
    SF_ERROR = VT_ERROR,
    SF_I1 = VT_I1,
    SF_I2 = VT_I2,
    SF_I4 = VT_I4,
    SF_I8 = VT_I8,
    SF_BSTR = VT_BSTR,
    SF_UNKNOWN = VT_UNKNOWN,
    SF_DISPATCH = VT_DISPATCH,
    SF_VARIANT = VT_VARIANT,
    SF_RECORD = VT_RECORD,
    SF_HAVEIID = VT_UNKNOWN | VT_RESERVED
} SF_TYPE;

typedef struct _wireSAFEARRAY_UNION {
    ULONG sfType;
    union {
        SAFEARR_BSTR BstrStr;
        SAFEARR_UNKNOWN UnknownStr;
        SAFEARR_DISPATCH DispatchStr;
        SAFEARR_VARIANT VariantStr;
        SAFEARR_BRECORD RecordStr;
        SAFEARR_HAVEIID HaveIidStr;
        BYTE_SIZEDARR ByteStr;
        WORD_SIZEDARR WordStr;
        DWORD_SIZEDARR LongStr;
        HYPER_SIZEDARR HyperStr;
    } u;
} SAFEARRAYUNION;

typedef struct _wireSAFEARRAY {
    USHORT cDims;
    USHORT fFeatures;
    ULONG cbElements;
    ULONG cLocks;
    SAFEARRAYUNION uArrayStructs;
    SAFEARRAYBOUND rgsabound[1];
} *wireSAFEARRAY;

typedef wireSAFEARRAY *wirePSAFEARRAY;

typedef struct tagSAFEARRAY {
    USHORT cDims;
    USHORT fFeatures;
    ULONG cbElements;
    ULONG cLocks;
    PVOID pvData;
    SAFEARRAYBOUND rgsabound[1];
} SAFEARRAY;

typedef SAFEARRAY *LPSAFEARRAY;
unsigned long   __RPC_USER LPSAFEARRAY_UserSize     (unsigned long *, unsigned long,   LPSAFEARRAY *);
unsigned char * __RPC_USER LPSAFEARRAY_UserMarshal  (unsigned long *, unsigned char *, LPSAFEARRAY *);
unsigned char * __RPC_USER LPSAFEARRAY_UserUnmarshal(unsigned long *, unsigned char *, LPSAFEARRAY *);
void            __RPC_USER LPSAFEARRAY_UserFree     (unsigned long *, LPSAFEARRAY *);

#define FADF_AUTO (0x1)

#define FADF_STATIC (0x2)

#define FADF_EMBEDDED (0x4)

#define FADF_FIXEDSIZE (0x10)

#define FADF_RECORD (0x20)

#define FADF_HAVEIID (0x40)

#define FADF_HAVEVARTYPE (0x80)

#define FADF_BSTR (0x100)

#define FADF_UNKNOWN (0x200)

#define FADF_DISPATCH (0x400)

#define FADF_VARIANT (0x800)

#define FADF_RESERVED (0xf008)

#define FADF_CREATEVECTOR (0x2000)

#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)
#define __VARIANT_NAME_1 n1
#define __VARIANT_NAME_2 n2
#define __VARIANT_NAME_3 n3
#define __VARIANT_NAME_4 brecVal
#else
#define __tagVARIANT
#define __VARIANT_NAME_1
#define __VARIANT_NAME_2
#define __VARIANT_NAME_3
#define __tagBRECORD
#define __VARIANT_NAME_4
#endif
typedef struct tagVARIANT VARIANT;
unsigned long   __RPC_USER VARIANT_UserSize     (unsigned long *, unsigned long,   VARIANT *);
unsigned char * __RPC_USER VARIANT_UserMarshal  (unsigned long *, unsigned char *, VARIANT *);
unsigned char * __RPC_USER VARIANT_UserUnmarshal(unsigned long *, unsigned char *, VARIANT *);
void            __RPC_USER VARIANT_UserFree     (unsigned long *, VARIANT *);

struct tagVARIANT {
    union {
        struct __tagVARIANT {
            VARTYPE vt;
            WORD wReserved1;
            WORD wReserved2;
            WORD wReserved3;
            union {
                CHAR cVal;
                USHORT uiVal;
                ULONG ulVal;
                INT intVal;
                UINT uintVal;
                BYTE bVal;
                SHORT iVal;
                LONG lVal;
                FLOAT fltVal;
                DOUBLE dblVal;
                VARIANT_BOOL boolVal;
                SCODE scode;
                DATE date;
                BSTR bstrVal;
                CY cyVal;
                IUnknown *punkVal;
                IDispatch *pdispVal;
                SAFEARRAY *parray;
                CHAR *pcVal;
                USHORT *puiVal;
                ULONG *pulVal;
                INT *pintVal;
                UINT *puintVal;
                BYTE *pbVal;
                SHORT *piVal;
                LONG *plVal;
                FLOAT *pfltVal;
                DOUBLE *pdblVal;
                VARIANT_BOOL *pboolVal;
                SCODE *pscode;
                DATE *pdate;
                BSTR *pbstrVal;
                VARIANT *pvarVal;
                PVOID byref;
                CY *pcyVal;
                DECIMAL *pdecVal;
                IUnknown **ppunkVal;
                IDispatch **ppdispVal;
                SAFEARRAY **pparray;
                struct __tagBRECORD {
                    PVOID pvRecord;
                    IRecordInfo *pRecInfo;
                } __VARIANT_NAME_4;
            } __VARIANT_NAME_3;
        } __VARIANT_NAME_2;
        DECIMAL decVal;
    } __VARIANT_NAME_1;
};

typedef VARIANT *LPVARIANT;

typedef VARIANT VARIANTARG;

typedef VARIANTARG *LPVARIANTARG;

struct _wireBRECORD {
    ULONG fFlags;
    ULONG clSize;
    IRecordInfo *pRecInfo;
    byte *pRecord;
};

struct _wireVARIANT {
    DWORD clSize;
    DWORD rpcReserved;
    USHORT vt;
    USHORT wReserved1;
    USHORT wReserved2;
    USHORT wReserved3;
    union {
        CHAR cVal;
        USHORT uiVal;
        ULONG ulVal;
        INT intVal;
        UINT uintVal;
        BYTE bVal;
        SHORT iVal;
        LONG lVal;
        FLOAT fltVal;
        DOUBLE dblVal;
        VARIANT_BOOL boolVal;
        SCODE scode;
        DATE date;
        wireBSTR bstrVal;
        CY cyVal;
        DECIMAL decVal;
        IUnknown *punkVal;
        IDispatch *pdispVal;
        wireSAFEARRAY parray;
        CHAR *pcVal;
        USHORT *puiVal;
        ULONG *pulVal;
        INT *pintVal;
        UINT *puintVal;
        BYTE *pbVal;
        SHORT *piVal;
        LONG *plVal;
        FLOAT *pfltVal;
        DOUBLE *pdblVal;
        VARIANT_BOOL *pboolVal;
        SCODE *pscode;
        DATE *pdate;
        wireBSTR *pbstrVal;
        wireVARIANT *pvarVal;
        CY *pcyVal;
        DECIMAL *pdecVal;
        IUnknown **ppunkVal;
        IDispatch **ppdispVal;
        wireSAFEARRAY *pparray;
        wireBRECORD brecVal;
    } DUMMYUNIONNAME;
};

typedef LONG DISPID;

typedef DWORD HREFTYPE;

typedef DISPID MEMBERID;

typedef enum tagTYPEKIND {
    TKIND_ENUM = 0,
    TKIND_RECORD,
    TKIND_MODULE,
    TKIND_INTERFACE,
    TKIND_DISPATCH,
    TKIND_COCLASS,
    TKIND_ALIAS,
    TKIND_UNION,
    TKIND_MAX
} TYPEKIND;

typedef struct tagTYPEDESC {
    union {
        struct tagTYPEDESC *lptdesc;
        struct tagARRAYDESC *lpadesc;
        HREFTYPE hreftype;
    } DUMMYUNIONNAME;
    VARTYPE vt;
} TYPEDESC;

typedef struct tagARRAYDESC {
    TYPEDESC tdescElem;
    USHORT cDims;
    SAFEARRAYBOUND rgbounds[1];
} ARRAYDESC;

typedef struct tagPARAMDESCEX {
    ULONG cBytes;
    VARIANTARG varDefaultValue;
} PARAMDESCEX, *LPPARAMDESCEX;

typedef struct tagPARAMDESC {
    LPPARAMDESCEX pparamdescex;
    USHORT wParamFlags;
} PARAMDESC, *LPPARAMDESC;

#define PARAMFLAG_NONE (0x0)

#define PARAMFLAG_FIN (0x1)

#define PARAMFLAG_FOUT (0x2)

#define PARAMFLAG_FLCID (0x4)

#define PARAMFLAG_FRETVAL (0x8)

#define PARAMFLAG_FOPT (0x10)

#define PARAMFLAG_FHASDEFAULT (0x20)

#define PARAMFLAG_FHASCUSTDATA (0x40)

typedef struct tagIDLDESC {
    ULONG dwReserved;
    USHORT wIDLFlags;
} IDLDESC, *LPIDLDESC;

#define IDLFLAG_NONE (PARAMFLAG_NONE)

#define IDLFLAG_FIN (PARAMFLAG_FIN)

#define IDLFLAG_FOUT (PARAMFLAG_FOUT)

#define IDLFLAG_FLCID (PARAMFLAG_FLCID)

#define IDLFLAG_FRETVAL (PARAMFLAG_FRETVAL)

#if 0
typedef struct tagELEMDESC {
    TYPEDESC tdesc;
    PARAMDESC paramdesc;
} ELEMDESC;

#else
typedef struct tagELEMDESC {
  TYPEDESC tdesc;
  union {
    IDLDESC idldesc;
    PARAMDESC paramdesc;
  } DUMMYUNIONNAME;
} ELEMDESC, *LPELEMDESC;
#endif
typedef struct tagTYPEATTR {
    GUID guid;
    LCID lcid;
    DWORD dwReserved;
    MEMBERID memidConstructor;
    MEMBERID memidDestructor;
    LPOLESTR lpstrSchema;
    ULONG cbSizeInstance;
    TYPEKIND typekind;
    WORD cFuncs;
    WORD cVars;
    WORD cImplTypes;
    WORD cbSizeVft;
    WORD cbAlignment;
    WORD wTypeFlags;
    WORD wMajorVerNum;
    WORD wMinorVerNum;
    TYPEDESC tdescAlias;
    IDLDESC idldescType;
} TYPEATTR, *LPTYPEATTR;

typedef struct tagDISPPARAMS {
    VARIANTARG *rgvarg;
    DISPID *rgdispidNamedArgs;
    UINT cArgs;
    UINT cNamedArgs;
} DISPPARAMS;

#if 0
typedef struct tagEXCEPINFO {
    WORD wCode;
    WORD wReserved;
    BSTR bstrSource;
    BSTR bstrDescription;
    BSTR bstrHelpFile;
    DWORD dwHelpContext;
    ULONG pvReserved;
    ULONG pfnDeferredFillIn;
    SCODE scode;
} EXCEPINFO;

#else
typedef struct tagEXCEPINFO {
  WORD wCode;
  WORD wReserved;
  BSTR bstrSource;
  BSTR bstrDescription;
  BSTR bstrHelpFile;
  DWORD dwHelpContext;
  PVOID pvReserved;
  HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);
  SCODE scode;
} EXCEPINFO, *LPEXCEPINFO;
#endif
typedef enum tagCALLCONV {
    CC_FASTCALL = 0,
    CC_CDECL = 1,
    CC_MSCPASCAL,
    CC_PASCAL = CC_MSCPASCAL,
    CC_MACPASCAL,
    CC_STDCALL,
    CC_FPFASTCALL,
    CC_SYSCALL,
    CC_MPWCDECL,
    CC_MPWPASCAL,
    CC_MAX
} CALLCONV;

typedef enum tagFUNCKIND {
    FUNC_VIRTUAL,
    FUNC_PUREVIRTUAL,
    FUNC_NONVIRTUAL,
    FUNC_STATIC,
    FUNC_DISPATCH
} FUNCKIND;

typedef enum tagINVOKEKIND {
    INVOKE_FUNC = 1,
    INVOKE_PROPERTYGET = 2,
    INVOKE_PROPERTYPUT = 4,
    INVOKE_PROPERTYPUTREF = 8
} INVOKEKIND;

typedef struct tagFUNCDESC {
    MEMBERID memid;
    SCODE *lprgscode;
    ELEMDESC *lprgelemdescParam;
    FUNCKIND funckind;
    INVOKEKIND invkind;
    CALLCONV callconv;
    SHORT cParams;
    SHORT cParamsOpt;
    SHORT oVft;
    SHORT cScodes;
    ELEMDESC elemdescFunc;
    WORD wFuncFlags;
} FUNCDESC, *LPFUNCDESC;

typedef enum tagVARKIND {
    VAR_PERINSTANCE,
    VAR_STATIC,
    VAR_CONST,
    VAR_DISPATCH
} VARKIND;

#define IMPLTYPEFLAG_FDEFAULT (0x1)

#define IMPLTYPEFLAG_FSOURCE (0x2)

#define IMPLTYPEFLAG_FRESTRICTED (0x4)

#define IMPLTYPEFLAG_FDEFAULTVTABLE (0x8)

typedef struct tagVARDESC {
    MEMBERID memid;
    LPOLESTR lpstrSchema;
    union {
        ULONG oInst;
        VARIANT *lpvarValue;
    } DUMMYUNIONNAME;
    ELEMDESC elemdescVar;
    WORD wVarFlags;
    VARKIND varkind;
} VARDESC, *LPVARDESC;

typedef enum tagTYPEFLAGS {
    TYPEFLAG_FAPPOBJECT = 0x1,
    TYPEFLAG_FCANCREATE = 0x2,
    TYPEFLAG_FLICENSED = 0x4,
    TYPEFLAG_FPREDECLID = 0x8,
    TYPEFLAG_FHIDDEN = 0x10,
    TYPEFLAG_FCONTROL = 0x20,
    TYPEFLAG_FDUAL = 0x40,
    TYPEFLAG_FNONEXTENSIBLE = 0x80,
    TYPEFLAG_FOLEAUTOMATION = 0x100,
    TYPEFLAG_FRESTRICTED = 0x200,
    TYPEFLAG_FAGGREGATABLE = 0x400,
    TYPEFLAG_FREPLACEABLE = 0x800,
    TYPEFLAG_FDISPATCHABLE = 0x1000,
    TYPEFLAG_FREVERSEBIND = 0x2000,
    TYPEFLAG_FPROXY = 0x4000
} TYPEFLAGS;

typedef enum tagFUNCFLAGS {
    FUNCFLAG_FRESTRICTED = 0x1,
    FUNCFLAG_FSOURCE = 0x2,
    FUNCFLAG_FBINDABLE = 0x4,
    FUNCFLAG_FREQUESTEDIT = 0x8,
    FUNCFLAG_FDISPLAYBIND = 0x10,
    FUNCFLAG_FDEFAULTBIND = 0x20,
    FUNCFLAG_FHIDDEN = 0x40,
    FUNCFLAG_FUSESGETLASTERROR = 0x80,
    FUNCFLAG_FDEFAULTCOLLELEM = 0x100,
    FUNCFLAG_FUIDEFAULT = 0x200,
    FUNCFLAG_FNONBROWSABLE = 0x400,
    FUNCFLAG_FREPLACEABLE = 0x800,
    FUNCFLAG_FIMMEDIATEBIND = 0x1000
} FUNCFLAGS;

typedef enum tagVARFLAGS {
    VARFLAG_FREADONLY = 0x1,
    VARFLAG_FSOURCE = 0x2,
    VARFLAG_FBINDABLE = 0x4,
    VARFLAG_FREQUESTEDIT = 0x8,
    VARFLAG_FDISPLAYBIND = 0x10,
    VARFLAG_FDEFAULTBIND = 0x20,
    VARFLAG_FHIDDEN = 0x40,
    VARFLAG_FRESTRICTED = 0x80,
    VARFLAG_FDEFAULTCOLLELEM = 0x100,
    VARFLAG_FUIDEFAULT = 0x200,
    VARFLAG_FNONBROWSABLE = 0x400,
    VARFLAG_FREPLACEABLE = 0x800,
    VARFLAG_FIMMEDIATEBIND = 0x1000
} VARFLAGS;

typedef struct tagCLEANLOCALSTORAGE {
    IUnknown *pInterface;
    PVOID pStorage;
    DWORD flags;
} CLEANLOCALSTORAGE;
unsigned long   __RPC_USER CLEANLOCALSTORAGE_UserSize     (unsigned long *, unsigned long,   CLEANLOCALSTORAGE *);
unsigned char * __RPC_USER CLEANLOCALSTORAGE_UserMarshal  (unsigned long *, unsigned char *, CLEANLOCALSTORAGE *);
unsigned char * __RPC_USER CLEANLOCALSTORAGE_UserUnmarshal(unsigned long *, unsigned char *, CLEANLOCALSTORAGE *);
void            __RPC_USER CLEANLOCALSTORAGE_UserFree     (unsigned long *, CLEANLOCALSTORAGE *);

typedef struct tagCUSTDATAITEM {
    GUID guid;
    VARIANTARG varValue;
} CUSTDATAITEM, *LPCUSTDATAITEM;

typedef struct tagCUSTDATA {
    DWORD cCustData;
    LPCUSTDATAITEM prgCustData;
} CUSTDATA, *LPCUSTDATA;

typedef IDispatch *LPDISPATCH;

#define DISPID_UNKNOWN (-1)

#define DISPID_VALUE (0)

#define DISPID_PROPERTYPUT (-3)

#define DISPID_NEWENUM (-4)

#define DISPID_EVALUATE (-5)

#define DISPID_CONSTRUCTOR (-6)

#define DISPID_DESTRUCTOR (-7)

#define DISPID_COLLECT (-8)

/*****************************************************************************
 * IDispatch interface
 */
#ifndef __IDispatch_INTERFACE_DEFINED__
#define __IDispatch_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDispatch, 0x00020400, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IDispatch: IUnknown {

    virtual HRESULT CALLBACK GetTypeInfoCount(
        UINT* pctinfo) = 0;

    virtual HRESULT CALLBACK GetTypeInfo(
        UINT iTInfo,
        LCID lcid,
        ITypeInfo** ppTInfo) = 0;

    virtual HRESULT CALLBACK GetIDsOfNames(
        REFIID riid,
        LPOLESTR* rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID* rgDispId) = 0;

    virtual HRESULT CALLBACK Invoke(
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS* pDispParams,
        VARIANT* pVarResult,
        EXCEPINFO* pExcepInfo,
        UINT* puArgErr) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct IDispatchVtbl IDispatchVtbl;
struct IDispatch {
    const IDispatchVtbl* lpVtbl;
};
struct IDispatchVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        IDispatch* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        IDispatch* This);

    ULONG (CALLBACK *Release)(
        IDispatch* This);

    /*** IDispatch methods ***/
    HRESULT (CALLBACK *GetTypeInfoCount)(
        IDispatch* This,
        UINT* pctinfo);

    HRESULT (CALLBACK *GetTypeInfo)(
        IDispatch* This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo** ppTInfo);

    HRESULT (CALLBACK *GetIDsOfNames)(
        IDispatch* This,
        REFIID riid,
        LPOLESTR* rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID* rgDispId);

    HRESULT (CALLBACK *Invoke)(
        IDispatch* This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS* pDispParams,
        VARIANT* pVarResult,
        EXCEPINFO* pExcepInfo,
        UINT* puArgErr);

};

#define IDispatch_IMETHODS \
    IUnknown_IMETHODS \
    ICOM_METHOD1 (HRESULT,GetTypeInfoCount,UINT*,pctinfo) \
    ICOM_METHOD3 (HRESULT,GetTypeInfo,UINT,iTInfo,LCID,lcid,ITypeInfo**,ppTInfo) \
    ICOM_METHOD5 (HRESULT,GetIDsOfNames,REFIID,riid,LPOLESTR*,rgszNames,UINT,cNames,LCID,lcid,DISPID*,rgDispId) \
    ICOM_METHOD8 (HRESULT,Invoke,DISPID,dispIdMember,REFIID,riid,LCID,lcid,WORD,wFlags,DISPPARAMS*,pDispParams,VARIANT*,pVarResult,EXCEPINFO*,pExcepInfo,UINT*,puArgErr)

/*** IUnknown methods ***/
#define IDispatch_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IDispatch_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IDispatch_Release(p) (p)->lpVtbl->Release(p)
/*** IDispatch methods ***/
#define IDispatch_GetTypeInfoCount(p,a) (p)->lpVtbl->GetTypeInfoCount(p,a)
#define IDispatch_GetTypeInfo(p,a,b,c) (p)->lpVtbl->GetTypeInfo(p,a,b,c)
#define IDispatch_GetIDsOfNames(p,a,b,c,d,e) (p)->lpVtbl->GetIDsOfNames(p,a,b,c,d,e)
#define IDispatch_Invoke(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Invoke(p,a,b,c,d,e,f,g,h)

#endif

HRESULT CALLBACK IDispatch_GetTypeInfoCount_Proxy(
    IDispatch* This,
    UINT* pctinfo);
void __RPC_STUB IDispatch_GetTypeInfoCount_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IDispatch_GetTypeInfo_Proxy(
    IDispatch* This,
    UINT iTInfo,
    LCID lcid,
    ITypeInfo** ppTInfo);
void __RPC_STUB IDispatch_GetTypeInfo_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IDispatch_GetIDsOfNames_Proxy(
    IDispatch* This,
    REFIID riid,
    LPOLESTR* rgszNames,
    UINT cNames,
    LCID lcid,
    DISPID* rgDispId);
void __RPC_STUB IDispatch_GetIDsOfNames_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IDispatch_RemoteInvoke_Proxy(
    IDispatch* This,
    DISPID dispIdMember,
    REFIID riid,
    LCID lcid,
    DWORD dwFlags,
    DISPPARAMS* pDispParams,
    VARIANT* pVarResult,
    EXCEPINFO* pExcepInfo,
    UINT* pArgErr,
    UINT cVarRef,
    UINT* rgVarRefIdx,
    VARIANTARG* rgVarRef);
void __RPC_STUB IDispatch_RemoteInvoke_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IDispatch_Invoke_Proxy(
    IDispatch* This,
    DISPID dispIdMember,
    REFIID riid,
    LCID lcid,
    WORD wFlags,
    DISPPARAMS* pDispParams,
    VARIANT* pVarResult,
    EXCEPINFO* pExcepInfo,
    UINT* puArgErr);
HRESULT __RPC_STUB IDispatch_Invoke_Stub(
    IDispatch* This,
    DISPID dispIdMember,
    REFIID riid,
    LCID lcid,
    DWORD dwFlags,
    DISPPARAMS* pDispParams,
    VARIANT* pVarResult,
    EXCEPINFO* pExcepInfo,
    UINT* pArgErr,
    UINT cVarRef,
    UINT* rgVarRefIdx,
    VARIANTARG* rgVarRef);

#endif  /* __IDispatch_INTERFACE_DEFINED__ */

typedef struct IEnumVARIANT IEnumVARIANT;
typedef IEnumVARIANT *LPENUMVARIANT;

/*****************************************************************************
 * IEnumVARIANT interface
 */
#ifndef __IEnumVARIANT_INTERFACE_DEFINED__
#define __IEnumVARIANT_INTERFACE_DEFINED__

DEFINE_GUID(IID_IEnumVARIANT, 0x00020404, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IEnumVARIANT: IUnknown {

    virtual HRESULT CALLBACK Next(
        ULONG celt,
        VARIANT* rgVar,
        ULONG* pCeltFetched) = 0;

    virtual HRESULT CALLBACK Skip(
        ULONG celt) = 0;

    virtual HRESULT CALLBACK Reset(
        ) = 0;

    virtual HRESULT CALLBACK Clone(
        IEnumVARIANT** ppEnum) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct IEnumVARIANTVtbl IEnumVARIANTVtbl;
struct IEnumVARIANT {
    const IEnumVARIANTVtbl* lpVtbl;
};
struct IEnumVARIANTVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        IEnumVARIANT* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        IEnumVARIANT* This);

    ULONG (CALLBACK *Release)(
        IEnumVARIANT* This);

    /*** IEnumVARIANT methods ***/
    HRESULT (CALLBACK *Next)(
        IEnumVARIANT* This,
        ULONG celt,
        VARIANT* rgVar,
        ULONG* pCeltFetched);

    HRESULT (CALLBACK *Skip)(
        IEnumVARIANT* This,
        ULONG celt);

    HRESULT (CALLBACK *Reset)(
        IEnumVARIANT* This);

    HRESULT (CALLBACK *Clone)(
        IEnumVARIANT* This,
        IEnumVARIANT** ppEnum);

};

#define IEnumVARIANT_IMETHODS \
    IUnknown_IMETHODS \
    ICOM_METHOD3 (HRESULT,Next,ULONG,celt,VARIANT*,rgVar,ULONG*,pCeltFetched) \
    ICOM_METHOD1 (HRESULT,Skip,ULONG,celt) \
    ICOM_METHOD  (HRESULT,Reset) \
    ICOM_METHOD1 (HRESULT,Clone,IEnumVARIANT**,ppEnum)

/*** IUnknown methods ***/
#define IEnumVARIANT_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IEnumVARIANT_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IEnumVARIANT_Release(p) (p)->lpVtbl->Release(p)
/*** IEnumVARIANT methods ***/
#define IEnumVARIANT_Next(p,a,b,c) (p)->lpVtbl->Next(p,a,b,c)
#define IEnumVARIANT_Skip(p,a) (p)->lpVtbl->Skip(p,a)
#define IEnumVARIANT_Reset(p) (p)->lpVtbl->Reset(p)
#define IEnumVARIANT_Clone(p,a) (p)->lpVtbl->Clone(p,a)

#endif

HRESULT CALLBACK IEnumVARIANT_RemoteNext_Proxy(
    IEnumVARIANT* This,
    ULONG celt,
    VARIANT* rgVar,
    ULONG* pCeltFetched);
void __RPC_STUB IEnumVARIANT_RemoteNext_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumVARIANT_Next_Proxy(
    IEnumVARIANT* This,
    ULONG celt,
    VARIANT* rgVar,
    ULONG* pCeltFetched);
HRESULT __RPC_STUB IEnumVARIANT_Next_Stub(
    IEnumVARIANT* This,
    ULONG celt,
    VARIANT* rgVar,
    ULONG* pCeltFetched);
HRESULT CALLBACK IEnumVARIANT_Skip_Proxy(
    IEnumVARIANT* This,
    ULONG celt);
void __RPC_STUB IEnumVARIANT_Skip_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumVARIANT_Reset_Proxy(
    IEnumVARIANT* This);
void __RPC_STUB IEnumVARIANT_Reset_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IEnumVARIANT_Clone_Proxy(
    IEnumVARIANT* This,
    IEnumVARIANT** ppEnum);
void __RPC_STUB IEnumVARIANT_Clone_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IEnumVARIANT_INTERFACE_DEFINED__ */

typedef struct ITypeComp ITypeComp;
typedef ITypeComp *LPTYPECOMP;

typedef enum tagDESCKIND {
    DESCKIND_NONE = 0,
    DESCKIND_FUNCDESC,
    DESCKIND_VARDESC,
    DESCKIND_TYPECOMP,
    DESCKIND_IMPLICITAPPOBJ,
    DESCKIND_MAX
} DESCKIND;

typedef union tagBINDPTR {
    FUNCDESC *lpfuncdesc;
    VARDESC *lpvardesc;
    ITypeComp *lptcomp;
} BINDPTR, *LPBINDPTR;

/*****************************************************************************
 * ITypeComp interface
 */
#ifndef __ITypeComp_INTERFACE_DEFINED__
#define __ITypeComp_INTERFACE_DEFINED__

DEFINE_GUID(IID_ITypeComp, 0x00020403, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ITypeComp: IUnknown {

    virtual HRESULT CALLBACK Bind(
        LPOLESTR szName,
        ULONG lHashVal,
        WORD wFlags,
        ITypeInfo** ppTInfo,
        DESCKIND* pDescKind,
        BINDPTR* pBindPtr) = 0;

    virtual HRESULT CALLBACK BindType(
        LPOLESTR szName,
        ULONG lHashVal,
        ITypeInfo** ppTInfo,
        ITypeComp** ppTComp) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct ITypeCompVtbl ITypeCompVtbl;
struct ITypeComp {
    const ITypeCompVtbl* lpVtbl;
};
struct ITypeCompVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        ITypeComp* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        ITypeComp* This);

    ULONG (CALLBACK *Release)(
        ITypeComp* This);

    /*** ITypeComp methods ***/
    HRESULT (CALLBACK *Bind)(
        ITypeComp* This,
        LPOLESTR szName,
        ULONG lHashVal,
        WORD wFlags,
        ITypeInfo** ppTInfo,
        DESCKIND* pDescKind,
        BINDPTR* pBindPtr);

    HRESULT (CALLBACK *BindType)(
        ITypeComp* This,
        LPOLESTR szName,
        ULONG lHashVal,
        ITypeInfo** ppTInfo,
        ITypeComp** ppTComp);

};

#define ITypeComp_IMETHODS \
    IUnknown_IMETHODS \
    ICOM_METHOD6 (HRESULT,Bind,LPOLESTR,szName,ULONG,lHashVal,WORD,wFlags,ITypeInfo**,ppTInfo,DESCKIND*,pDescKind,BINDPTR*,pBindPtr) \
    ICOM_METHOD4 (HRESULT,BindType,LPOLESTR,szName,ULONG,lHashVal,ITypeInfo**,ppTInfo,ITypeComp**,ppTComp)

/*** IUnknown methods ***/
#define ITypeComp_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ITypeComp_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ITypeComp_Release(p) (p)->lpVtbl->Release(p)
/*** ITypeComp methods ***/
#define ITypeComp_Bind(p,a,b,c,d,e,f) (p)->lpVtbl->Bind(p,a,b,c,d,e,f)
#define ITypeComp_BindType(p,a,b,c,d) (p)->lpVtbl->BindType(p,a,b,c,d)

#endif

HRESULT CALLBACK ITypeComp_RemoteBind_Proxy(
    ITypeComp* This,
    LPOLESTR szName,
    ULONG lHashVal,
    WORD wFlags,
    ITypeInfo** ppTInfo,
    DESCKIND* pDescKind,
    LPFUNCDESC* ppFuncDesc,
    LPVARDESC* ppVarDesc,
    ITypeComp** ppTypeComp,
    CLEANLOCALSTORAGE* pDummy);
void __RPC_STUB ITypeComp_RemoteBind_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeComp_Bind_Proxy(
    ITypeComp* This,
    LPOLESTR szName,
    ULONG lHashVal,
    WORD wFlags,
    ITypeInfo** ppTInfo,
    DESCKIND* pDescKind,
    BINDPTR* pBindPtr);
HRESULT __RPC_STUB ITypeComp_Bind_Stub(
    ITypeComp* This,
    LPOLESTR szName,
    ULONG lHashVal,
    WORD wFlags,
    ITypeInfo** ppTInfo,
    DESCKIND* pDescKind,
    LPFUNCDESC* ppFuncDesc,
    LPVARDESC* ppVarDesc,
    ITypeComp** ppTypeComp,
    CLEANLOCALSTORAGE* pDummy);
HRESULT CALLBACK ITypeComp_RemoteBindType_Proxy(
    ITypeComp* This,
    LPOLESTR szName,
    ULONG lHashVal,
    ITypeInfo** ppTInfo);
void __RPC_STUB ITypeComp_RemoteBindType_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeComp_BindType_Proxy(
    ITypeComp* This,
    LPOLESTR szName,
    ULONG lHashVal,
    ITypeInfo** ppTInfo,
    ITypeComp** ppTComp);
HRESULT __RPC_STUB ITypeComp_BindType_Stub(
    ITypeComp* This,
    LPOLESTR szName,
    ULONG lHashVal,
    ITypeInfo** ppTInfo);

#endif  /* __ITypeComp_INTERFACE_DEFINED__ */

typedef ITypeInfo *LPTYPEINFO;

/*****************************************************************************
 * ITypeInfo interface
 */
#ifndef __ITypeInfo_INTERFACE_DEFINED__
#define __ITypeInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_ITypeInfo, 0x00020401, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ITypeInfo: IUnknown {

    virtual HRESULT CALLBACK GetTypeAttr(
        TYPEATTR** ppTypeAttr) = 0;

    virtual HRESULT CALLBACK GetTypeComp(
        ITypeComp** ppTComp) = 0;

    virtual HRESULT CALLBACK GetFuncDesc(
        UINT index,
        FUNCDESC** ppFuncDesc) = 0;

    virtual HRESULT CALLBACK GetVarDesc(
        UINT index,
        VARDESC** ppVarDesc) = 0;

    virtual HRESULT CALLBACK GetNames(
        MEMBERID memid,
        BSTR* rgBstrNames,
        UINT cMaxNames,
        UINT* pcNames) = 0;

    virtual HRESULT CALLBACK GetRefTypeOfImplType(
        UINT index,
        HREFTYPE* pRefType) = 0;

    virtual HRESULT CALLBACK GetImplTypeFlags(
        UINT index,
        INT* pImplTypeFlags) = 0;

    virtual HRESULT CALLBACK GetIDsOfNames(
        LPOLESTR* rgszNames,
        UINT cNames,
        MEMBERID* pMemId) = 0;

    virtual HRESULT CALLBACK Invoke(
        PVOID pvInstance,
        MEMBERID memid,
        WORD wFlags,
        DISPPARAMS* pDispParams,
        VARIANT* pVarResult,
        EXCEPINFO* pExcepInfo,
        UINT* puArgErr) = 0;

    virtual HRESULT CALLBACK GetDocumentation(
        MEMBERID memid,
        BSTR* pBstrName,
        BSTR* pBstrDocString,
        DWORD* pdwHelpContext,
        BSTR* pBstrHelpFile) = 0;

    virtual HRESULT CALLBACK GetDllEntry(
        MEMBERID memid,
        INVOKEKIND invKind,
        BSTR* pBstrDllName,
        BSTR* pBstrName,
        WORD* pwOrdinal) = 0;

    virtual HRESULT CALLBACK GetRefTypeInfo(
        HREFTYPE hRefType,
        ITypeInfo** ppTInfo) = 0;

    virtual HRESULT CALLBACK AddressOfMember(
        MEMBERID memid,
        INVOKEKIND invKind,
        PVOID* ppv) = 0;

    virtual HRESULT CALLBACK CreateInstance(
        IUnknown* pUnkOuter,
        REFIID riid,
        PVOID* ppvObj) = 0;

    virtual HRESULT CALLBACK GetMops(
        MEMBERID memid,
        BSTR* pBstrMops) = 0;

    virtual HRESULT CALLBACK GetContainingTypeLib(
        ITypeLib** ppTLib,
        UINT* pIndex) = 0;

    virtual void CALLBACK ReleaseTypeAttr(
        TYPEATTR* pTypeAttr) = 0;

    virtual void CALLBACK ReleaseFuncDesc(
        FUNCDESC* pFuncDesc) = 0;

    virtual void CALLBACK ReleaseVarDesc(
        VARDESC* pVarDesc) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct ITypeInfoVtbl ITypeInfoVtbl;
struct ITypeInfo {
    const ITypeInfoVtbl* lpVtbl;
};
struct ITypeInfoVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        ITypeInfo* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        ITypeInfo* This);

    ULONG (CALLBACK *Release)(
        ITypeInfo* This);

    /*** ITypeInfo methods ***/
    HRESULT (CALLBACK *GetTypeAttr)(
        ITypeInfo* This,
        TYPEATTR** ppTypeAttr);

    HRESULT (CALLBACK *GetTypeComp)(
        ITypeInfo* This,
        ITypeComp** ppTComp);

    HRESULT (CALLBACK *GetFuncDesc)(
        ITypeInfo* This,
        UINT index,
        FUNCDESC** ppFuncDesc);

    HRESULT (CALLBACK *GetVarDesc)(
        ITypeInfo* This,
        UINT index,
        VARDESC** ppVarDesc);

    HRESULT (CALLBACK *GetNames)(
        ITypeInfo* This,
        MEMBERID memid,
        BSTR* rgBstrNames,
        UINT cMaxNames,
        UINT* pcNames);

    HRESULT (CALLBACK *GetRefTypeOfImplType)(
        ITypeInfo* This,
        UINT index,
        HREFTYPE* pRefType);

    HRESULT (CALLBACK *GetImplTypeFlags)(
        ITypeInfo* This,
        UINT index,
        INT* pImplTypeFlags);

    HRESULT (CALLBACK *GetIDsOfNames)(
        ITypeInfo* This,
        LPOLESTR* rgszNames,
        UINT cNames,
        MEMBERID* pMemId);

    HRESULT (CALLBACK *Invoke)(
        ITypeInfo* This,
        PVOID pvInstance,
        MEMBERID memid,
        WORD wFlags,
        DISPPARAMS* pDispParams,
        VARIANT* pVarResult,
        EXCEPINFO* pExcepInfo,
        UINT* puArgErr);

    HRESULT (CALLBACK *GetDocumentation)(
        ITypeInfo* This,
        MEMBERID memid,
        BSTR* pBstrName,
        BSTR* pBstrDocString,
        DWORD* pdwHelpContext,
        BSTR* pBstrHelpFile);

    HRESULT (CALLBACK *GetDllEntry)(
        ITypeInfo* This,
        MEMBERID memid,
        INVOKEKIND invKind,
        BSTR* pBstrDllName,
        BSTR* pBstrName,
        WORD* pwOrdinal);

    HRESULT (CALLBACK *GetRefTypeInfo)(
        ITypeInfo* This,
        HREFTYPE hRefType,
        ITypeInfo** ppTInfo);

    HRESULT (CALLBACK *AddressOfMember)(
        ITypeInfo* This,
        MEMBERID memid,
        INVOKEKIND invKind,
        PVOID* ppv);

    HRESULT (CALLBACK *CreateInstance)(
        ITypeInfo* This,
        IUnknown* pUnkOuter,
        REFIID riid,
        PVOID* ppvObj);

    HRESULT (CALLBACK *GetMops)(
        ITypeInfo* This,
        MEMBERID memid,
        BSTR* pBstrMops);

    HRESULT (CALLBACK *GetContainingTypeLib)(
        ITypeInfo* This,
        ITypeLib** ppTLib,
        UINT* pIndex);

    void (CALLBACK *ReleaseTypeAttr)(
        ITypeInfo* This,
        TYPEATTR* pTypeAttr);

    void (CALLBACK *ReleaseFuncDesc)(
        ITypeInfo* This,
        FUNCDESC* pFuncDesc);

    void (CALLBACK *ReleaseVarDesc)(
        ITypeInfo* This,
        VARDESC* pVarDesc);

};

#define ITypeInfo_IMETHODS \
    IUnknown_IMETHODS \
    ICOM_METHOD1 (HRESULT,GetTypeAttr,TYPEATTR**,ppTypeAttr) \
    ICOM_METHOD1 (HRESULT,GetTypeComp,ITypeComp**,ppTComp) \
    ICOM_METHOD2 (HRESULT,GetFuncDesc,UINT,index,FUNCDESC**,ppFuncDesc) \
    ICOM_METHOD2 (HRESULT,GetVarDesc,UINT,index,VARDESC**,ppVarDesc) \
    ICOM_METHOD4 (HRESULT,GetNames,MEMBERID,memid,BSTR*,rgBstrNames,UINT,cMaxNames,UINT*,pcNames) \
    ICOM_METHOD2 (HRESULT,GetRefTypeOfImplType,UINT,index,HREFTYPE*,pRefType) \
    ICOM_METHOD2 (HRESULT,GetImplTypeFlags,UINT,index,INT*,pImplTypeFlags) \
    ICOM_METHOD3 (HRESULT,GetIDsOfNames,LPOLESTR*,rgszNames,UINT,cNames,MEMBERID*,pMemId) \
    ICOM_METHOD7 (HRESULT,Invoke,PVOID,pvInstance,MEMBERID,memid,WORD,wFlags,DISPPARAMS*,pDispParams,VARIANT*,pVarResult,EXCEPINFO*,pExcepInfo,UINT*,puArgErr) \
    ICOM_METHOD5 (HRESULT,GetDocumentation,MEMBERID,memid,BSTR*,pBstrName,BSTR*,pBstrDocString,DWORD*,pdwHelpContext,BSTR*,pBstrHelpFile) \
    ICOM_METHOD5 (HRESULT,GetDllEntry,MEMBERID,memid,INVOKEKIND,invKind,BSTR*,pBstrDllName,BSTR*,pBstrName,WORD*,pwOrdinal) \
    ICOM_METHOD2 (HRESULT,GetRefTypeInfo,HREFTYPE,hRefType,ITypeInfo**,ppTInfo) \
    ICOM_METHOD3 (HRESULT,AddressOfMember,MEMBERID,memid,INVOKEKIND,invKind,PVOID*,ppv) \
    ICOM_METHOD3 (HRESULT,CreateInstance,IUnknown*,pUnkOuter,REFIID,riid,PVOID*,ppvObj) \
    ICOM_METHOD2 (HRESULT,GetMops,MEMBERID,memid,BSTR*,pBstrMops) \
    ICOM_METHOD2 (HRESULT,GetContainingTypeLib,ITypeLib**,ppTLib,UINT*,pIndex) \
    ICOM_VMETHOD1(ReleaseTypeAttr,TYPEATTR*,pTypeAttr) \
    ICOM_VMETHOD1(ReleaseFuncDesc,FUNCDESC*,pFuncDesc) \
    ICOM_VMETHOD1(ReleaseVarDesc,VARDESC*,pVarDesc)

/*** IUnknown methods ***/
#define ITypeInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ITypeInfo_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ITypeInfo_Release(p) (p)->lpVtbl->Release(p)
/*** ITypeInfo methods ***/
#define ITypeInfo_GetTypeAttr(p,a) (p)->lpVtbl->GetTypeAttr(p,a)
#define ITypeInfo_GetTypeComp(p,a) (p)->lpVtbl->GetTypeComp(p,a)
#define ITypeInfo_GetFuncDesc(p,a,b) (p)->lpVtbl->GetFuncDesc(p,a,b)
#define ITypeInfo_GetVarDesc(p,a,b) (p)->lpVtbl->GetVarDesc(p,a,b)
#define ITypeInfo_GetNames(p,a,b,c,d) (p)->lpVtbl->GetNames(p,a,b,c,d)
#define ITypeInfo_GetRefTypeOfImplType(p,a,b) (p)->lpVtbl->GetRefTypeOfImplType(p,a,b)
#define ITypeInfo_GetImplTypeFlags(p,a,b) (p)->lpVtbl->GetImplTypeFlags(p,a,b)
#define ITypeInfo_GetIDsOfNames(p,a,b,c) (p)->lpVtbl->GetIDsOfNames(p,a,b,c)
#define ITypeInfo_Invoke(p,a,b,c,d,e,f,g) (p)->lpVtbl->Invoke(p,a,b,c,d,e,f,g)
#define ITypeInfo_GetDocumentation(p,a,b,c,d,e) (p)->lpVtbl->GetDocumentation(p,a,b,c,d,e)
#define ITypeInfo_GetDllEntry(p,a,b,c,d,e) (p)->lpVtbl->GetDllEntry(p,a,b,c,d,e)
#define ITypeInfo_GetRefTypeInfo(p,a,b) (p)->lpVtbl->GetRefTypeInfo(p,a,b)
#define ITypeInfo_AddressOfMember(p,a,b,c) (p)->lpVtbl->AddressOfMember(p,a,b,c)
#define ITypeInfo_CreateInstance(p,a,b,c) (p)->lpVtbl->CreateInstance(p,a,b,c)
#define ITypeInfo_GetMops(p,a,b) (p)->lpVtbl->GetMops(p,a,b)
#define ITypeInfo_GetContainingTypeLib(p,a,b) (p)->lpVtbl->GetContainingTypeLib(p,a,b)
#define ITypeInfo_ReleaseTypeAttr(p,a) (p)->lpVtbl->ReleaseTypeAttr(p,a)
#define ITypeInfo_ReleaseFuncDesc(p,a) (p)->lpVtbl->ReleaseFuncDesc(p,a)
#define ITypeInfo_ReleaseVarDesc(p,a) (p)->lpVtbl->ReleaseVarDesc(p,a)

#endif

HRESULT CALLBACK ITypeInfo_RemoteGetTypeAttr_Proxy(
    ITypeInfo* This,
    LPTYPEATTR* ppTypeAttr,
    CLEANLOCALSTORAGE* pDummy);
void __RPC_STUB ITypeInfo_RemoteGetTypeAttr_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo_GetTypeAttr_Proxy(
    ITypeInfo* This,
    TYPEATTR** ppTypeAttr);
HRESULT __RPC_STUB ITypeInfo_GetTypeAttr_Stub(
    ITypeInfo* This,
    LPTYPEATTR* ppTypeAttr,
    CLEANLOCALSTORAGE* pDummy);
HRESULT CALLBACK ITypeInfo_GetTypeComp_Proxy(
    ITypeInfo* This,
    ITypeComp** ppTComp);
void __RPC_STUB ITypeInfo_GetTypeComp_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo_RemoteGetFuncDesc_Proxy(
    ITypeInfo* This,
    UINT index,
    LPFUNCDESC* ppFuncDesc,
    CLEANLOCALSTORAGE* pDummy);
void __RPC_STUB ITypeInfo_RemoteGetFuncDesc_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo_GetFuncDesc_Proxy(
    ITypeInfo* This,
    UINT index,
    FUNCDESC** ppFuncDesc);
HRESULT __RPC_STUB ITypeInfo_GetFuncDesc_Stub(
    ITypeInfo* This,
    UINT index,
    LPFUNCDESC* ppFuncDesc,
    CLEANLOCALSTORAGE* pDummy);
HRESULT CALLBACK ITypeInfo_RemoteGetVarDesc_Proxy(
    ITypeInfo* This,
    UINT index,
    LPVARDESC* ppVarDesc,
    CLEANLOCALSTORAGE* pDummy);
void __RPC_STUB ITypeInfo_RemoteGetVarDesc_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo_GetVarDesc_Proxy(
    ITypeInfo* This,
    UINT index,
    VARDESC** ppVarDesc);
HRESULT __RPC_STUB ITypeInfo_GetVarDesc_Stub(
    ITypeInfo* This,
    UINT index,
    LPVARDESC* ppVarDesc,
    CLEANLOCALSTORAGE* pDummy);
HRESULT CALLBACK ITypeInfo_RemoteGetNames_Proxy(
    ITypeInfo* This,
    MEMBERID memid,
    BSTR* rgBstrNames,
    UINT cMaxNames,
    UINT* pcNames);
void __RPC_STUB ITypeInfo_RemoteGetNames_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo_GetNames_Proxy(
    ITypeInfo* This,
    MEMBERID memid,
    BSTR* rgBstrNames,
    UINT cMaxNames,
    UINT* pcNames);
HRESULT __RPC_STUB ITypeInfo_GetNames_Stub(
    ITypeInfo* This,
    MEMBERID memid,
    BSTR* rgBstrNames,
    UINT cMaxNames,
    UINT* pcNames);
HRESULT CALLBACK ITypeInfo_GetRefTypeOfImplType_Proxy(
    ITypeInfo* This,
    UINT index,
    HREFTYPE* pRefType);
void __RPC_STUB ITypeInfo_GetRefTypeOfImplType_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo_GetImplTypeFlags_Proxy(
    ITypeInfo* This,
    UINT index,
    INT* pImplTypeFlags);
void __RPC_STUB ITypeInfo_GetImplTypeFlags_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo_LocalGetIDsOfNames_Proxy(
    ITypeInfo* This);
void __RPC_STUB ITypeInfo_LocalGetIDsOfNames_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo_GetIDsOfNames_Proxy(
    ITypeInfo* This,
    LPOLESTR* rgszNames,
    UINT cNames,
    MEMBERID* pMemId);
HRESULT __RPC_STUB ITypeInfo_GetIDsOfNames_Stub(
    ITypeInfo* This);
HRESULT CALLBACK ITypeInfo_LocalInvoke_Proxy(
    ITypeInfo* This);
void __RPC_STUB ITypeInfo_LocalInvoke_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo_Invoke_Proxy(
    ITypeInfo* This,
    PVOID pvInstance,
    MEMBERID memid,
    WORD wFlags,
    DISPPARAMS* pDispParams,
    VARIANT* pVarResult,
    EXCEPINFO* pExcepInfo,
    UINT* puArgErr);
HRESULT __RPC_STUB ITypeInfo_Invoke_Stub(
    ITypeInfo* This);
HRESULT CALLBACK ITypeInfo_RemoteGetDocumentation_Proxy(
    ITypeInfo* This,
    MEMBERID memid,
    DWORD refPtrFlags,
    BSTR* pBstrName,
    BSTR* pBstrDocString,
    DWORD* pdwHelpContext,
    BSTR* pBstrHelpFile);
void __RPC_STUB ITypeInfo_RemoteGetDocumentation_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo_GetDocumentation_Proxy(
    ITypeInfo* This,
    MEMBERID memid,
    BSTR* pBstrName,
    BSTR* pBstrDocString,
    DWORD* pdwHelpContext,
    BSTR* pBstrHelpFile);
HRESULT __RPC_STUB ITypeInfo_GetDocumentation_Stub(
    ITypeInfo* This,
    MEMBERID memid,
    DWORD refPtrFlags,
    BSTR* pBstrName,
    BSTR* pBstrDocString,
    DWORD* pdwHelpContext,
    BSTR* pBstrHelpFile);
HRESULT CALLBACK ITypeInfo_RemoteGetDllEntry_Proxy(
    ITypeInfo* This,
    MEMBERID memid,
    INVOKEKIND invKind,
    DWORD refPtrFlags,
    BSTR* pBstrDllName,
    BSTR* pBstrName,
    WORD* pwOrdinal);
void __RPC_STUB ITypeInfo_RemoteGetDllEntry_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo_GetDllEntry_Proxy(
    ITypeInfo* This,
    MEMBERID memid,
    INVOKEKIND invKind,
    BSTR* pBstrDllName,
    BSTR* pBstrName,
    WORD* pwOrdinal);
HRESULT __RPC_STUB ITypeInfo_GetDllEntry_Stub(
    ITypeInfo* This,
    MEMBERID memid,
    INVOKEKIND invKind,
    DWORD refPtrFlags,
    BSTR* pBstrDllName,
    BSTR* pBstrName,
    WORD* pwOrdinal);
HRESULT CALLBACK ITypeInfo_GetRefTypeInfo_Proxy(
    ITypeInfo* This,
    HREFTYPE hRefType,
    ITypeInfo** ppTInfo);
void __RPC_STUB ITypeInfo_GetRefTypeInfo_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo_LocalAddressOfMember_Proxy(
    ITypeInfo* This);
void __RPC_STUB ITypeInfo_LocalAddressOfMember_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo_AddressOfMember_Proxy(
    ITypeInfo* This,
    MEMBERID memid,
    INVOKEKIND invKind,
    PVOID* ppv);
HRESULT __RPC_STUB ITypeInfo_AddressOfMember_Stub(
    ITypeInfo* This);
HRESULT CALLBACK ITypeInfo_RemoteCreateInstance_Proxy(
    ITypeInfo* This,
    REFIID riid,
    IUnknown** ppvObj);
void __RPC_STUB ITypeInfo_RemoteCreateInstance_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo_CreateInstance_Proxy(
    ITypeInfo* This,
    IUnknown* pUnkOuter,
    REFIID riid,
    PVOID* ppvObj);
HRESULT __RPC_STUB ITypeInfo_CreateInstance_Stub(
    ITypeInfo* This,
    REFIID riid,
    IUnknown** ppvObj);
HRESULT CALLBACK ITypeInfo_GetMops_Proxy(
    ITypeInfo* This,
    MEMBERID memid,
    BSTR* pBstrMops);
void __RPC_STUB ITypeInfo_GetMops_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo_RemoteGetContainingTypeLib_Proxy(
    ITypeInfo* This,
    ITypeLib** ppTLib,
    UINT* pIndex);
void __RPC_STUB ITypeInfo_RemoteGetContainingTypeLib_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo_GetContainingTypeLib_Proxy(
    ITypeInfo* This,
    ITypeLib** ppTLib,
    UINT* pIndex);
HRESULT __RPC_STUB ITypeInfo_GetContainingTypeLib_Stub(
    ITypeInfo* This,
    ITypeLib** ppTLib,
    UINT* pIndex);
HRESULT CALLBACK ITypeInfo_LocalReleaseTypeAttr_Proxy(
    ITypeInfo* This);
void __RPC_STUB ITypeInfo_LocalReleaseTypeAttr_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
void CALLBACK ITypeInfo_ReleaseTypeAttr_Proxy(
    ITypeInfo* This,
    TYPEATTR* pTypeAttr);
HRESULT __RPC_STUB ITypeInfo_ReleaseTypeAttr_Stub(
    ITypeInfo* This);
HRESULT CALLBACK ITypeInfo_LocalReleaseFuncDesc_Proxy(
    ITypeInfo* This);
void __RPC_STUB ITypeInfo_LocalReleaseFuncDesc_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
void CALLBACK ITypeInfo_ReleaseFuncDesc_Proxy(
    ITypeInfo* This,
    FUNCDESC* pFuncDesc);
HRESULT __RPC_STUB ITypeInfo_ReleaseFuncDesc_Stub(
    ITypeInfo* This);
HRESULT CALLBACK ITypeInfo_LocalReleaseVarDesc_Proxy(
    ITypeInfo* This);
void __RPC_STUB ITypeInfo_LocalReleaseVarDesc_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
void CALLBACK ITypeInfo_ReleaseVarDesc_Proxy(
    ITypeInfo* This,
    VARDESC* pVarDesc);
HRESULT __RPC_STUB ITypeInfo_ReleaseVarDesc_Stub(
    ITypeInfo* This);

#endif  /* __ITypeInfo_INTERFACE_DEFINED__ */

typedef struct ITypeInfo2 ITypeInfo2;
typedef ITypeInfo2 *LPTYPEINFO2;

/*****************************************************************************
 * ITypeInfo2 interface
 */
#ifndef __ITypeInfo2_INTERFACE_DEFINED__
#define __ITypeInfo2_INTERFACE_DEFINED__

DEFINE_GUID(IID_ITypeInfo2, 0x00020412, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ITypeInfo2: ITypeInfo {

    virtual HRESULT CALLBACK GetTypeKind(
        TYPEKIND* pTypeKind) = 0;

    virtual HRESULT CALLBACK GetTypeFlags(
        ULONG* pTypeFlags) = 0;

    virtual HRESULT CALLBACK GetFuncIndexOfMemId(
        MEMBERID memid,
        INVOKEKIND invKind,
        UINT* pFuncIndex) = 0;

    virtual HRESULT CALLBACK GetVarIndexOfMemId(
        MEMBERID memid,
        UINT* pVarIndex) = 0;

    virtual HRESULT CALLBACK GetCustData(
        REFGUID guid,
        VARIANT* pVarVal) = 0;

    virtual HRESULT CALLBACK GetFuncCustData(
        UINT index,
        REFGUID guid,
        VARIANT* pVarVal) = 0;

    virtual HRESULT CALLBACK GetParamCustData(
        UINT indexFunc,
        UINT indexParam,
        REFGUID guid,
        VARIANT* pVarVal) = 0;

    virtual HRESULT CALLBACK GetVarCustData(
        UINT index,
        REFGUID guid,
        VARIANT* pVarVal) = 0;

    virtual HRESULT CALLBACK GetImplTypeCustData(
        UINT index,
        REFGUID guid,
        VARIANT* pVarVal) = 0;

    virtual HRESULT CALLBACK GetDocumentation2(
        MEMBERID memid,
        LCID lcid,
        BSTR* pbstrHelpString,
        DWORD* pdwHelpStringContext,
        BSTR* pbstrHelpStringDll) = 0;

    virtual HRESULT CALLBACK GetAllCustData(
        CUSTDATA* pCustData) = 0;

    virtual HRESULT CALLBACK GetAllFuncCustData(
        UINT index,
        CUSTDATA* pCustData) = 0;

    virtual HRESULT CALLBACK GetAllParamCustData(
        UINT indexFunc,
        UINT indexParam,
        CUSTDATA* pCustData) = 0;

    virtual HRESULT CALLBACK GetAllVarCustData(
        UINT index,
        CUSTDATA* pCustData) = 0;

    virtual HRESULT CALLBACK GetAllImplTypeCustData(
        UINT index,
        CUSTDATA* pCustData) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct ITypeInfo2Vtbl ITypeInfo2Vtbl;
struct ITypeInfo2 {
    const ITypeInfo2Vtbl* lpVtbl;
};
struct ITypeInfo2Vtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        ITypeInfo2* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        ITypeInfo2* This);

    ULONG (CALLBACK *Release)(
        ITypeInfo2* This);

    /*** ITypeInfo methods ***/
    HRESULT (CALLBACK *GetTypeAttr)(
        ITypeInfo2* This,
        TYPEATTR** ppTypeAttr);

    HRESULT (CALLBACK *GetTypeComp)(
        ITypeInfo2* This,
        ITypeComp** ppTComp);

    HRESULT (CALLBACK *GetFuncDesc)(
        ITypeInfo2* This,
        UINT index,
        FUNCDESC** ppFuncDesc);

    HRESULT (CALLBACK *GetVarDesc)(
        ITypeInfo2* This,
        UINT index,
        VARDESC** ppVarDesc);

    HRESULT (CALLBACK *GetNames)(
        ITypeInfo2* This,
        MEMBERID memid,
        BSTR* rgBstrNames,
        UINT cMaxNames,
        UINT* pcNames);

    HRESULT (CALLBACK *GetRefTypeOfImplType)(
        ITypeInfo2* This,
        UINT index,
        HREFTYPE* pRefType);

    HRESULT (CALLBACK *GetImplTypeFlags)(
        ITypeInfo2* This,
        UINT index,
        INT* pImplTypeFlags);

    HRESULT (CALLBACK *GetIDsOfNames)(
        ITypeInfo2* This,
        LPOLESTR* rgszNames,
        UINT cNames,
        MEMBERID* pMemId);

    HRESULT (CALLBACK *Invoke)(
        ITypeInfo2* This,
        PVOID pvInstance,
        MEMBERID memid,
        WORD wFlags,
        DISPPARAMS* pDispParams,
        VARIANT* pVarResult,
        EXCEPINFO* pExcepInfo,
        UINT* puArgErr);

    HRESULT (CALLBACK *GetDocumentation)(
        ITypeInfo2* This,
        MEMBERID memid,
        BSTR* pBstrName,
        BSTR* pBstrDocString,
        DWORD* pdwHelpContext,
        BSTR* pBstrHelpFile);

    HRESULT (CALLBACK *GetDllEntry)(
        ITypeInfo2* This,
        MEMBERID memid,
        INVOKEKIND invKind,
        BSTR* pBstrDllName,
        BSTR* pBstrName,
        WORD* pwOrdinal);

    HRESULT (CALLBACK *GetRefTypeInfo)(
        ITypeInfo2* This,
        HREFTYPE hRefType,
        ITypeInfo** ppTInfo);

    HRESULT (CALLBACK *AddressOfMember)(
        ITypeInfo2* This,
        MEMBERID memid,
        INVOKEKIND invKind,
        PVOID* ppv);

    HRESULT (CALLBACK *CreateInstance)(
        ITypeInfo2* This,
        IUnknown* pUnkOuter,
        REFIID riid,
        PVOID* ppvObj);

    HRESULT (CALLBACK *GetMops)(
        ITypeInfo2* This,
        MEMBERID memid,
        BSTR* pBstrMops);

    HRESULT (CALLBACK *GetContainingTypeLib)(
        ITypeInfo2* This,
        ITypeLib** ppTLib,
        UINT* pIndex);

    void (CALLBACK *ReleaseTypeAttr)(
        ITypeInfo2* This,
        TYPEATTR* pTypeAttr);

    void (CALLBACK *ReleaseFuncDesc)(
        ITypeInfo2* This,
        FUNCDESC* pFuncDesc);

    void (CALLBACK *ReleaseVarDesc)(
        ITypeInfo2* This,
        VARDESC* pVarDesc);

    /*** ITypeInfo2 methods ***/
    HRESULT (CALLBACK *GetTypeKind)(
        ITypeInfo2* This,
        TYPEKIND* pTypeKind);

    HRESULT (CALLBACK *GetTypeFlags)(
        ITypeInfo2* This,
        ULONG* pTypeFlags);

    HRESULT (CALLBACK *GetFuncIndexOfMemId)(
        ITypeInfo2* This,
        MEMBERID memid,
        INVOKEKIND invKind,
        UINT* pFuncIndex);

    HRESULT (CALLBACK *GetVarIndexOfMemId)(
        ITypeInfo2* This,
        MEMBERID memid,
        UINT* pVarIndex);

    HRESULT (CALLBACK *GetCustData)(
        ITypeInfo2* This,
        REFGUID guid,
        VARIANT* pVarVal);

    HRESULT (CALLBACK *GetFuncCustData)(
        ITypeInfo2* This,
        UINT index,
        REFGUID guid,
        VARIANT* pVarVal);

    HRESULT (CALLBACK *GetParamCustData)(
        ITypeInfo2* This,
        UINT indexFunc,
        UINT indexParam,
        REFGUID guid,
        VARIANT* pVarVal);

    HRESULT (CALLBACK *GetVarCustData)(
        ITypeInfo2* This,
        UINT index,
        REFGUID guid,
        VARIANT* pVarVal);

    HRESULT (CALLBACK *GetImplTypeCustData)(
        ITypeInfo2* This,
        UINT index,
        REFGUID guid,
        VARIANT* pVarVal);

    HRESULT (CALLBACK *GetDocumentation2)(
        ITypeInfo2* This,
        MEMBERID memid,
        LCID lcid,
        BSTR* pbstrHelpString,
        DWORD* pdwHelpStringContext,
        BSTR* pbstrHelpStringDll);

    HRESULT (CALLBACK *GetAllCustData)(
        ITypeInfo2* This,
        CUSTDATA* pCustData);

    HRESULT (CALLBACK *GetAllFuncCustData)(
        ITypeInfo2* This,
        UINT index,
        CUSTDATA* pCustData);

    HRESULT (CALLBACK *GetAllParamCustData)(
        ITypeInfo2* This,
        UINT indexFunc,
        UINT indexParam,
        CUSTDATA* pCustData);

    HRESULT (CALLBACK *GetAllVarCustData)(
        ITypeInfo2* This,
        UINT index,
        CUSTDATA* pCustData);

    HRESULT (CALLBACK *GetAllImplTypeCustData)(
        ITypeInfo2* This,
        UINT index,
        CUSTDATA* pCustData);

};

#define ITypeInfo2_IMETHODS \
    ITypeInfo_IMETHODS \
    ICOM_METHOD1 (HRESULT,GetTypeKind,TYPEKIND*,pTypeKind) \
    ICOM_METHOD1 (HRESULT,GetTypeFlags,ULONG*,pTypeFlags) \
    ICOM_METHOD3 (HRESULT,GetFuncIndexOfMemId,MEMBERID,memid,INVOKEKIND,invKind,UINT*,pFuncIndex) \
    ICOM_METHOD2 (HRESULT,GetVarIndexOfMemId,MEMBERID,memid,UINT*,pVarIndex) \
    ICOM_METHOD2 (HRESULT,GetCustData,REFGUID,guid,VARIANT*,pVarVal) \
    ICOM_METHOD3 (HRESULT,GetFuncCustData,UINT,index,REFGUID,guid,VARIANT*,pVarVal) \
    ICOM_METHOD4 (HRESULT,GetParamCustData,UINT,indexFunc,UINT,indexParam,REFGUID,guid,VARIANT*,pVarVal) \
    ICOM_METHOD3 (HRESULT,GetVarCustData,UINT,index,REFGUID,guid,VARIANT*,pVarVal) \
    ICOM_METHOD3 (HRESULT,GetImplTypeCustData,UINT,index,REFGUID,guid,VARIANT*,pVarVal) \
    ICOM_METHOD5 (HRESULT,GetDocumentation2,MEMBERID,memid,LCID,lcid,BSTR*,pbstrHelpString,DWORD*,pdwHelpStringContext,BSTR*,pbstrHelpStringDll) \
    ICOM_METHOD1 (HRESULT,GetAllCustData,CUSTDATA*,pCustData) \
    ICOM_METHOD2 (HRESULT,GetAllFuncCustData,UINT,index,CUSTDATA*,pCustData) \
    ICOM_METHOD3 (HRESULT,GetAllParamCustData,UINT,indexFunc,UINT,indexParam,CUSTDATA*,pCustData) \
    ICOM_METHOD2 (HRESULT,GetAllVarCustData,UINT,index,CUSTDATA*,pCustData) \
    ICOM_METHOD2 (HRESULT,GetAllImplTypeCustData,UINT,index,CUSTDATA*,pCustData)

/*** IUnknown methods ***/
#define ITypeInfo2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ITypeInfo2_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ITypeInfo2_Release(p) (p)->lpVtbl->Release(p)
/*** ITypeInfo methods ***/
#define ITypeInfo2_GetTypeAttr(p,a) (p)->lpVtbl->GetTypeAttr(p,a)
#define ITypeInfo2_GetTypeComp(p,a) (p)->lpVtbl->GetTypeComp(p,a)
#define ITypeInfo2_GetFuncDesc(p,a,b) (p)->lpVtbl->GetFuncDesc(p,a,b)
#define ITypeInfo2_GetVarDesc(p,a,b) (p)->lpVtbl->GetVarDesc(p,a,b)
#define ITypeInfo2_GetNames(p,a,b,c,d) (p)->lpVtbl->GetNames(p,a,b,c,d)
#define ITypeInfo2_GetRefTypeOfImplType(p,a,b) (p)->lpVtbl->GetRefTypeOfImplType(p,a,b)
#define ITypeInfo2_GetImplTypeFlags(p,a,b) (p)->lpVtbl->GetImplTypeFlags(p,a,b)
#define ITypeInfo2_GetIDsOfNames(p,a,b,c) (p)->lpVtbl->GetIDsOfNames(p,a,b,c)
#define ITypeInfo2_Invoke(p,a,b,c,d,e,f,g) (p)->lpVtbl->Invoke(p,a,b,c,d,e,f,g)
#define ITypeInfo2_GetDocumentation(p,a,b,c,d,e) (p)->lpVtbl->GetDocumentation(p,a,b,c,d,e)
#define ITypeInfo2_GetDllEntry(p,a,b,c,d,e) (p)->lpVtbl->GetDllEntry(p,a,b,c,d,e)
#define ITypeInfo2_GetRefTypeInfo(p,a,b) (p)->lpVtbl->GetRefTypeInfo(p,a,b)
#define ITypeInfo2_AddressOfMember(p,a,b,c) (p)->lpVtbl->AddressOfMember(p,a,b,c)
#define ITypeInfo2_CreateInstance(p,a,b,c) (p)->lpVtbl->CreateInstance(p,a,b,c)
#define ITypeInfo2_GetMops(p,a,b) (p)->lpVtbl->GetMops(p,a,b)
#define ITypeInfo2_GetContainingTypeLib(p,a,b) (p)->lpVtbl->GetContainingTypeLib(p,a,b)
#define ITypeInfo2_ReleaseTypeAttr(p,a) (p)->lpVtbl->ReleaseTypeAttr(p,a)
#define ITypeInfo2_ReleaseFuncDesc(p,a) (p)->lpVtbl->ReleaseFuncDesc(p,a)
#define ITypeInfo2_ReleaseVarDesc(p,a) (p)->lpVtbl->ReleaseVarDesc(p,a)
/*** ITypeInfo2 methods ***/
#define ITypeInfo2_GetTypeKind(p,a) (p)->lpVtbl->GetTypeKind(p,a)
#define ITypeInfo2_GetTypeFlags(p,a) (p)->lpVtbl->GetTypeFlags(p,a)
#define ITypeInfo2_GetFuncIndexOfMemId(p,a,b,c) (p)->lpVtbl->GetFuncIndexOfMemId(p,a,b,c)
#define ITypeInfo2_GetVarIndexOfMemId(p,a,b) (p)->lpVtbl->GetVarIndexOfMemId(p,a,b)
#define ITypeInfo2_GetCustData(p,a,b) (p)->lpVtbl->GetCustData(p,a,b)
#define ITypeInfo2_GetFuncCustData(p,a,b,c) (p)->lpVtbl->GetFuncCustData(p,a,b,c)
#define ITypeInfo2_GetParamCustData(p,a,b,c,d) (p)->lpVtbl->GetParamCustData(p,a,b,c,d)
#define ITypeInfo2_GetVarCustData(p,a,b,c) (p)->lpVtbl->GetVarCustData(p,a,b,c)
#define ITypeInfo2_GetImplTypeCustData(p,a,b,c) (p)->lpVtbl->GetImplTypeCustData(p,a,b,c)
#define ITypeInfo2_GetDocumentation2(p,a,b,c,d,e) (p)->lpVtbl->GetDocumentation2(p,a,b,c,d,e)
#define ITypeInfo2_GetAllCustData(p,a) (p)->lpVtbl->GetAllCustData(p,a)
#define ITypeInfo2_GetAllFuncCustData(p,a,b) (p)->lpVtbl->GetAllFuncCustData(p,a,b)
#define ITypeInfo2_GetAllParamCustData(p,a,b,c) (p)->lpVtbl->GetAllParamCustData(p,a,b,c)
#define ITypeInfo2_GetAllVarCustData(p,a,b) (p)->lpVtbl->GetAllVarCustData(p,a,b)
#define ITypeInfo2_GetAllImplTypeCustData(p,a,b) (p)->lpVtbl->GetAllImplTypeCustData(p,a,b)

#endif

HRESULT CALLBACK ITypeInfo2_GetTypeKind_Proxy(
    ITypeInfo2* This,
    TYPEKIND* pTypeKind);
void __RPC_STUB ITypeInfo2_GetTypeKind_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo2_GetTypeFlags_Proxy(
    ITypeInfo2* This,
    ULONG* pTypeFlags);
void __RPC_STUB ITypeInfo2_GetTypeFlags_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo2_GetFuncIndexOfMemId_Proxy(
    ITypeInfo2* This,
    MEMBERID memid,
    INVOKEKIND invKind,
    UINT* pFuncIndex);
void __RPC_STUB ITypeInfo2_GetFuncIndexOfMemId_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo2_GetVarIndexOfMemId_Proxy(
    ITypeInfo2* This,
    MEMBERID memid,
    UINT* pVarIndex);
void __RPC_STUB ITypeInfo2_GetVarIndexOfMemId_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo2_GetCustData_Proxy(
    ITypeInfo2* This,
    REFGUID guid,
    VARIANT* pVarVal);
void __RPC_STUB ITypeInfo2_GetCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo2_GetFuncCustData_Proxy(
    ITypeInfo2* This,
    UINT index,
    REFGUID guid,
    VARIANT* pVarVal);
void __RPC_STUB ITypeInfo2_GetFuncCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo2_GetParamCustData_Proxy(
    ITypeInfo2* This,
    UINT indexFunc,
    UINT indexParam,
    REFGUID guid,
    VARIANT* pVarVal);
void __RPC_STUB ITypeInfo2_GetParamCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo2_GetVarCustData_Proxy(
    ITypeInfo2* This,
    UINT index,
    REFGUID guid,
    VARIANT* pVarVal);
void __RPC_STUB ITypeInfo2_GetVarCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo2_GetImplTypeCustData_Proxy(
    ITypeInfo2* This,
    UINT index,
    REFGUID guid,
    VARIANT* pVarVal);
void __RPC_STUB ITypeInfo2_GetImplTypeCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo2_RemoteGetDocumentation2_Proxy(
    ITypeInfo2* This,
    MEMBERID memid,
    LCID lcid,
    DWORD refPtrFlags,
    BSTR* pbstrHelpString,
    DWORD* pdwHelpStringContext,
    BSTR* pbstrHelpStringDll);
void __RPC_STUB ITypeInfo2_RemoteGetDocumentation2_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo2_GetDocumentation2_Proxy(
    ITypeInfo2* This,
    MEMBERID memid,
    LCID lcid,
    BSTR* pbstrHelpString,
    DWORD* pdwHelpStringContext,
    BSTR* pbstrHelpStringDll);
HRESULT __RPC_STUB ITypeInfo2_GetDocumentation2_Stub(
    ITypeInfo2* This,
    MEMBERID memid,
    LCID lcid,
    DWORD refPtrFlags,
    BSTR* pbstrHelpString,
    DWORD* pdwHelpStringContext,
    BSTR* pbstrHelpStringDll);
HRESULT CALLBACK ITypeInfo2_GetAllCustData_Proxy(
    ITypeInfo2* This,
    CUSTDATA* pCustData);
void __RPC_STUB ITypeInfo2_GetAllCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo2_GetAllFuncCustData_Proxy(
    ITypeInfo2* This,
    UINT index,
    CUSTDATA* pCustData);
void __RPC_STUB ITypeInfo2_GetAllFuncCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo2_GetAllParamCustData_Proxy(
    ITypeInfo2* This,
    UINT indexFunc,
    UINT indexParam,
    CUSTDATA* pCustData);
void __RPC_STUB ITypeInfo2_GetAllParamCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo2_GetAllVarCustData_Proxy(
    ITypeInfo2* This,
    UINT index,
    CUSTDATA* pCustData);
void __RPC_STUB ITypeInfo2_GetAllVarCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeInfo2_GetAllImplTypeCustData_Proxy(
    ITypeInfo2* This,
    UINT index,
    CUSTDATA* pCustData);
void __RPC_STUB ITypeInfo2_GetAllImplTypeCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ITypeInfo2_INTERFACE_DEFINED__ */

typedef ITypeLib *LPTYPELIB;

typedef enum tagSYSKIND {
    SYS_WIN16 = 0,
    SYS_WIN32,
    SYS_MAC
} SYSKIND;

typedef enum tagLIBFLAGS {
    LIBFLAG_FRESTRICTED = 0x1,
    LIBFLAG_FCONTROL = 0x2,
    LIBFLAG_FHIDDEN = 0x4,
    LIBFLAG_FHASDISKIMAGE = 0x8
} LIBFLAGS;

typedef struct tagTLIBATTR {
    GUID guid;
    LCID lcid;
    SYSKIND syskind;
    WORD wMajorVerNum;
    WORD wMinorVerNum;
    WORD wLibFlags;
} TLIBATTR, *LPTLIBATTR;

/*****************************************************************************
 * ITypeLib interface
 */
#ifndef __ITypeLib_INTERFACE_DEFINED__
#define __ITypeLib_INTERFACE_DEFINED__

DEFINE_GUID(IID_ITypeLib, 0x00020402, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ITypeLib: IUnknown {

    virtual UINT CALLBACK GetTypeInfoCount(
        ) = 0;

    virtual HRESULT CALLBACK GetTypeInfo(
        UINT index,
        ITypeInfo** ppTInfo) = 0;

    virtual HRESULT CALLBACK GetTypeInfoType(
        UINT index,
        TYPEKIND* pTKind) = 0;

    virtual HRESULT CALLBACK GetTypeInfoOfGuid(
        REFGUID guid,
        ITypeInfo** ppTinfo) = 0;

    virtual HRESULT CALLBACK GetLibAttr(
        TLIBATTR** ppTLibAttr) = 0;

    virtual HRESULT CALLBACK GetTypeComp(
        ITypeComp** ppTComp) = 0;

    virtual HRESULT CALLBACK GetDocumentation(
        INT index,
        BSTR* pBstrName,
        BSTR* pBstrDocString,
        DWORD* pdwHelpContext,
        BSTR* pBstrHelpFile) = 0;

    virtual HRESULT CALLBACK IsName(
        LPOLESTR szNameBuf,
        ULONG lHashVal,
        BOOL* pfName) = 0;

    virtual HRESULT CALLBACK FindName(
        LPOLESTR szNameBuf,
        ULONG lHashVal,
        ITypeInfo** ppTInfo,
        MEMBERID* rgMemId,
        USHORT* pcFound) = 0;

    virtual void CALLBACK ReleaseTLibAttr(
        TLIBATTR* pTLibAttr) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct ITypeLibVtbl ITypeLibVtbl;
struct ITypeLib {
    const ITypeLibVtbl* lpVtbl;
};
struct ITypeLibVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        ITypeLib* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        ITypeLib* This);

    ULONG (CALLBACK *Release)(
        ITypeLib* This);

    /*** ITypeLib methods ***/
    UINT (CALLBACK *GetTypeInfoCount)(
        ITypeLib* This);

    HRESULT (CALLBACK *GetTypeInfo)(
        ITypeLib* This,
        UINT index,
        ITypeInfo** ppTInfo);

    HRESULT (CALLBACK *GetTypeInfoType)(
        ITypeLib* This,
        UINT index,
        TYPEKIND* pTKind);

    HRESULT (CALLBACK *GetTypeInfoOfGuid)(
        ITypeLib* This,
        REFGUID guid,
        ITypeInfo** ppTinfo);

    HRESULT (CALLBACK *GetLibAttr)(
        ITypeLib* This,
        TLIBATTR** ppTLibAttr);

    HRESULT (CALLBACK *GetTypeComp)(
        ITypeLib* This,
        ITypeComp** ppTComp);

    HRESULT (CALLBACK *GetDocumentation)(
        ITypeLib* This,
        INT index,
        BSTR* pBstrName,
        BSTR* pBstrDocString,
        DWORD* pdwHelpContext,
        BSTR* pBstrHelpFile);

    HRESULT (CALLBACK *IsName)(
        ITypeLib* This,
        LPOLESTR szNameBuf,
        ULONG lHashVal,
        BOOL* pfName);

    HRESULT (CALLBACK *FindName)(
        ITypeLib* This,
        LPOLESTR szNameBuf,
        ULONG lHashVal,
        ITypeInfo** ppTInfo,
        MEMBERID* rgMemId,
        USHORT* pcFound);

    void (CALLBACK *ReleaseTLibAttr)(
        ITypeLib* This,
        TLIBATTR* pTLibAttr);

};

#define ITypeLib_IMETHODS \
    IUnknown_IMETHODS \
    ICOM_METHOD  (UINT,GetTypeInfoCount) \
    ICOM_METHOD2 (HRESULT,GetTypeInfo,UINT,index,ITypeInfo**,ppTInfo) \
    ICOM_METHOD2 (HRESULT,GetTypeInfoType,UINT,index,TYPEKIND*,pTKind) \
    ICOM_METHOD2 (HRESULT,GetTypeInfoOfGuid,REFGUID,guid,ITypeInfo**,ppTinfo) \
    ICOM_METHOD1 (HRESULT,GetLibAttr,TLIBATTR**,ppTLibAttr) \
    ICOM_METHOD1 (HRESULT,GetTypeComp,ITypeComp**,ppTComp) \
    ICOM_METHOD5 (HRESULT,GetDocumentation,INT,index,BSTR*,pBstrName,BSTR*,pBstrDocString,DWORD*,pdwHelpContext,BSTR*,pBstrHelpFile) \
    ICOM_METHOD3 (HRESULT,IsName,LPOLESTR,szNameBuf,ULONG,lHashVal,BOOL*,pfName) \
    ICOM_METHOD5 (HRESULT,FindName,LPOLESTR,szNameBuf,ULONG,lHashVal,ITypeInfo**,ppTInfo,MEMBERID*,rgMemId,USHORT*,pcFound) \
    ICOM_VMETHOD1(ReleaseTLibAttr,TLIBATTR*,pTLibAttr)

/*** IUnknown methods ***/
#define ITypeLib_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ITypeLib_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ITypeLib_Release(p) (p)->lpVtbl->Release(p)
/*** ITypeLib methods ***/
#define ITypeLib_GetTypeInfoCount(p) (p)->lpVtbl->GetTypeInfoCount(p)
#define ITypeLib_GetTypeInfo(p,a,b) (p)->lpVtbl->GetTypeInfo(p,a,b)
#define ITypeLib_GetTypeInfoType(p,a,b) (p)->lpVtbl->GetTypeInfoType(p,a,b)
#define ITypeLib_GetTypeInfoOfGuid(p,a,b) (p)->lpVtbl->GetTypeInfoOfGuid(p,a,b)
#define ITypeLib_GetLibAttr(p,a) (p)->lpVtbl->GetLibAttr(p,a)
#define ITypeLib_GetTypeComp(p,a) (p)->lpVtbl->GetTypeComp(p,a)
#define ITypeLib_GetDocumentation(p,a,b,c,d,e) (p)->lpVtbl->GetDocumentation(p,a,b,c,d,e)
#define ITypeLib_IsName(p,a,b,c) (p)->lpVtbl->IsName(p,a,b,c)
#define ITypeLib_FindName(p,a,b,c,d,e) (p)->lpVtbl->FindName(p,a,b,c,d,e)
#define ITypeLib_ReleaseTLibAttr(p,a) (p)->lpVtbl->ReleaseTLibAttr(p,a)

#endif

HRESULT CALLBACK ITypeLib_RemoteGetTypeInfoCount_Proxy(
    ITypeLib* This,
    UINT* pcTInfo);
void __RPC_STUB ITypeLib_RemoteGetTypeInfoCount_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
UINT CALLBACK ITypeLib_GetTypeInfoCount_Proxy(
    ITypeLib* This);
HRESULT __RPC_STUB ITypeLib_GetTypeInfoCount_Stub(
    ITypeLib* This,
    UINT* pcTInfo);
HRESULT CALLBACK ITypeLib_GetTypeInfo_Proxy(
    ITypeLib* This,
    UINT index,
    ITypeInfo** ppTInfo);
void __RPC_STUB ITypeLib_GetTypeInfo_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeLib_GetTypeInfoType_Proxy(
    ITypeLib* This,
    UINT index,
    TYPEKIND* pTKind);
void __RPC_STUB ITypeLib_GetTypeInfoType_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeLib_GetTypeInfoOfGuid_Proxy(
    ITypeLib* This,
    REFGUID guid,
    ITypeInfo** ppTinfo);
void __RPC_STUB ITypeLib_GetTypeInfoOfGuid_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeLib_RemoteGetLibAttr_Proxy(
    ITypeLib* This,
    LPTLIBATTR* ppTLibAttr,
    CLEANLOCALSTORAGE* pDummy);
void __RPC_STUB ITypeLib_RemoteGetLibAttr_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeLib_GetLibAttr_Proxy(
    ITypeLib* This,
    TLIBATTR** ppTLibAttr);
HRESULT __RPC_STUB ITypeLib_GetLibAttr_Stub(
    ITypeLib* This,
    LPTLIBATTR* ppTLibAttr,
    CLEANLOCALSTORAGE* pDummy);
HRESULT CALLBACK ITypeLib_GetTypeComp_Proxy(
    ITypeLib* This,
    ITypeComp** ppTComp);
void __RPC_STUB ITypeLib_GetTypeComp_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeLib_RemoteGetDocumentation_Proxy(
    ITypeLib* This,
    INT index,
    DWORD refPtrFlags,
    BSTR* pBstrName,
    BSTR* pBstrDocString,
    DWORD* pdwHelpContext,
    BSTR* pBstrHelpFile);
void __RPC_STUB ITypeLib_RemoteGetDocumentation_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeLib_GetDocumentation_Proxy(
    ITypeLib* This,
    INT index,
    BSTR* pBstrName,
    BSTR* pBstrDocString,
    DWORD* pdwHelpContext,
    BSTR* pBstrHelpFile);
HRESULT __RPC_STUB ITypeLib_GetDocumentation_Stub(
    ITypeLib* This,
    INT index,
    DWORD refPtrFlags,
    BSTR* pBstrName,
    BSTR* pBstrDocString,
    DWORD* pdwHelpContext,
    BSTR* pBstrHelpFile);
HRESULT CALLBACK ITypeLib_RemoteIsName_Proxy(
    ITypeLib* This,
    LPOLESTR szNameBuf,
    ULONG lHashVal,
    BOOL* pfName,
    BSTR* pBstrLibName);
void __RPC_STUB ITypeLib_RemoteIsName_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeLib_IsName_Proxy(
    ITypeLib* This,
    LPOLESTR szNameBuf,
    ULONG lHashVal,
    BOOL* pfName);
HRESULT __RPC_STUB ITypeLib_IsName_Stub(
    ITypeLib* This,
    LPOLESTR szNameBuf,
    ULONG lHashVal,
    BOOL* pfName,
    BSTR* pBstrLibName);
HRESULT CALLBACK ITypeLib_RemoteFindName_Proxy(
    ITypeLib* This,
    LPOLESTR szNameBuf,
    ULONG lHashVal,
    ITypeInfo** ppTInfo,
    MEMBERID* rgMemId,
    USHORT* pcFound,
    BSTR* pBstrLibName);
void __RPC_STUB ITypeLib_RemoteFindName_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeLib_FindName_Proxy(
    ITypeLib* This,
    LPOLESTR szNameBuf,
    ULONG lHashVal,
    ITypeInfo** ppTInfo,
    MEMBERID* rgMemId,
    USHORT* pcFound);
HRESULT __RPC_STUB ITypeLib_FindName_Stub(
    ITypeLib* This,
    LPOLESTR szNameBuf,
    ULONG lHashVal,
    ITypeInfo** ppTInfo,
    MEMBERID* rgMemId,
    USHORT* pcFound,
    BSTR* pBstrLibName);
HRESULT CALLBACK ITypeLib_LocalReleaseTLibAttr_Proxy(
    ITypeLib* This);
void __RPC_STUB ITypeLib_LocalReleaseTLibAttr_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
void CALLBACK ITypeLib_ReleaseTLibAttr_Proxy(
    ITypeLib* This,
    TLIBATTR* pTLibAttr);
HRESULT __RPC_STUB ITypeLib_ReleaseTLibAttr_Stub(
    ITypeLib* This);

#endif  /* __ITypeLib_INTERFACE_DEFINED__ */

typedef struct ITypeLib2 ITypeLib2;
typedef ITypeLib2 *LPTYPELIB2;

/*****************************************************************************
 * ITypeLib2 interface
 */
#ifndef __ITypeLib2_INTERFACE_DEFINED__
#define __ITypeLib2_INTERFACE_DEFINED__

DEFINE_GUID(IID_ITypeLib2, 0x00020411, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ITypeLib2: ITypeLib {

    virtual HRESULT CALLBACK GetCustData(
        REFGUID guid,
        VARIANT* pVarVal) = 0;

    virtual HRESULT CALLBACK GetLibStatistics(
        ULONG* pcUniqueNames,
        ULONG* pcchUniqueNames) = 0;

    virtual HRESULT CALLBACK GetDocumentation2(
        INT index,
        LCID lcid,
        BSTR* pbstrHelpString,
        DWORD* pdwHelpStringContext,
        BSTR* pbstrHelpStringDll) = 0;

    virtual HRESULT CALLBACK GetAllCustData(
        CUSTDATA* pCustData) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct ITypeLib2Vtbl ITypeLib2Vtbl;
struct ITypeLib2 {
    const ITypeLib2Vtbl* lpVtbl;
};
struct ITypeLib2Vtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        ITypeLib2* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        ITypeLib2* This);

    ULONG (CALLBACK *Release)(
        ITypeLib2* This);

    /*** ITypeLib methods ***/
    UINT (CALLBACK *GetTypeInfoCount)(
        ITypeLib2* This);

    HRESULT (CALLBACK *GetTypeInfo)(
        ITypeLib2* This,
        UINT index,
        ITypeInfo** ppTInfo);

    HRESULT (CALLBACK *GetTypeInfoType)(
        ITypeLib2* This,
        UINT index,
        TYPEKIND* pTKind);

    HRESULT (CALLBACK *GetTypeInfoOfGuid)(
        ITypeLib2* This,
        REFGUID guid,
        ITypeInfo** ppTinfo);

    HRESULT (CALLBACK *GetLibAttr)(
        ITypeLib2* This,
        TLIBATTR** ppTLibAttr);

    HRESULT (CALLBACK *GetTypeComp)(
        ITypeLib2* This,
        ITypeComp** ppTComp);

    HRESULT (CALLBACK *GetDocumentation)(
        ITypeLib2* This,
        INT index,
        BSTR* pBstrName,
        BSTR* pBstrDocString,
        DWORD* pdwHelpContext,
        BSTR* pBstrHelpFile);

    HRESULT (CALLBACK *IsName)(
        ITypeLib2* This,
        LPOLESTR szNameBuf,
        ULONG lHashVal,
        BOOL* pfName);

    HRESULT (CALLBACK *FindName)(
        ITypeLib2* This,
        LPOLESTR szNameBuf,
        ULONG lHashVal,
        ITypeInfo** ppTInfo,
        MEMBERID* rgMemId,
        USHORT* pcFound);

    void (CALLBACK *ReleaseTLibAttr)(
        ITypeLib2* This,
        TLIBATTR* pTLibAttr);

    /*** ITypeLib2 methods ***/
    HRESULT (CALLBACK *GetCustData)(
        ITypeLib2* This,
        REFGUID guid,
        VARIANT* pVarVal);

    HRESULT (CALLBACK *GetLibStatistics)(
        ITypeLib2* This,
        ULONG* pcUniqueNames,
        ULONG* pcchUniqueNames);

    HRESULT (CALLBACK *GetDocumentation2)(
        ITypeLib2* This,
        INT index,
        LCID lcid,
        BSTR* pbstrHelpString,
        DWORD* pdwHelpStringContext,
        BSTR* pbstrHelpStringDll);

    HRESULT (CALLBACK *GetAllCustData)(
        ITypeLib2* This,
        CUSTDATA* pCustData);

};

#define ITypeLib2_IMETHODS \
    ITypeLib_IMETHODS \
    ICOM_METHOD2 (HRESULT,GetCustData,REFGUID,guid,VARIANT*,pVarVal) \
    ICOM_METHOD2 (HRESULT,GetLibStatistics,ULONG*,pcUniqueNames,ULONG*,pcchUniqueNames) \
    ICOM_METHOD5 (HRESULT,GetDocumentation2,INT,index,LCID,lcid,BSTR*,pbstrHelpString,DWORD*,pdwHelpStringContext,BSTR*,pbstrHelpStringDll) \
    ICOM_METHOD1 (HRESULT,GetAllCustData,CUSTDATA*,pCustData)

/*** IUnknown methods ***/
#define ITypeLib2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ITypeLib2_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ITypeLib2_Release(p) (p)->lpVtbl->Release(p)
/*** ITypeLib methods ***/
#define ITypeLib2_GetTypeInfoCount(p) (p)->lpVtbl->GetTypeInfoCount(p)
#define ITypeLib2_GetTypeInfo(p,a,b) (p)->lpVtbl->GetTypeInfo(p,a,b)
#define ITypeLib2_GetTypeInfoType(p,a,b) (p)->lpVtbl->GetTypeInfoType(p,a,b)
#define ITypeLib2_GetTypeInfoOfGuid(p,a,b) (p)->lpVtbl->GetTypeInfoOfGuid(p,a,b)
#define ITypeLib2_GetLibAttr(p,a) (p)->lpVtbl->GetLibAttr(p,a)
#define ITypeLib2_GetTypeComp(p,a) (p)->lpVtbl->GetTypeComp(p,a)
#define ITypeLib2_GetDocumentation(p,a,b,c,d,e) (p)->lpVtbl->GetDocumentation(p,a,b,c,d,e)
#define ITypeLib2_IsName(p,a,b,c) (p)->lpVtbl->IsName(p,a,b,c)
#define ITypeLib2_FindName(p,a,b,c,d,e) (p)->lpVtbl->FindName(p,a,b,c,d,e)
#define ITypeLib2_ReleaseTLibAttr(p,a) (p)->lpVtbl->ReleaseTLibAttr(p,a)
/*** ITypeLib2 methods ***/
#define ITypeLib2_GetCustData(p,a,b) (p)->lpVtbl->GetCustData(p,a,b)
#define ITypeLib2_GetLibStatistics(p,a,b) (p)->lpVtbl->GetLibStatistics(p,a,b)
#define ITypeLib2_GetDocumentation2(p,a,b,c,d,e) (p)->lpVtbl->GetDocumentation2(p,a,b,c,d,e)
#define ITypeLib2_GetAllCustData(p,a) (p)->lpVtbl->GetAllCustData(p,a)

#endif

HRESULT CALLBACK ITypeLib2_GetCustData_Proxy(
    ITypeLib2* This,
    REFGUID guid,
    VARIANT* pVarVal);
void __RPC_STUB ITypeLib2_GetCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeLib2_RemoteGetLibStatistics_Proxy(
    ITypeLib2* This,
    ULONG* pcUniqueNames,
    ULONG* pcchUniqueNames);
void __RPC_STUB ITypeLib2_RemoteGetLibStatistics_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeLib2_GetLibStatistics_Proxy(
    ITypeLib2* This,
    ULONG* pcUniqueNames,
    ULONG* pcchUniqueNames);
HRESULT __RPC_STUB ITypeLib2_GetLibStatistics_Stub(
    ITypeLib2* This,
    ULONG* pcUniqueNames,
    ULONG* pcchUniqueNames);
HRESULT CALLBACK ITypeLib2_RemoteGetDocumentation2_Proxy(
    ITypeLib2* This,
    INT index,
    LCID lcid,
    DWORD refPtrFlags,
    BSTR* pbstrHelpString,
    DWORD* pdwHelpStringContext,
    BSTR* pbstrHelpStringDll);
void __RPC_STUB ITypeLib2_RemoteGetDocumentation2_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeLib2_GetDocumentation2_Proxy(
    ITypeLib2* This,
    INT index,
    LCID lcid,
    BSTR* pbstrHelpString,
    DWORD* pdwHelpStringContext,
    BSTR* pbstrHelpStringDll);
HRESULT __RPC_STUB ITypeLib2_GetDocumentation2_Stub(
    ITypeLib2* This,
    INT index,
    LCID lcid,
    DWORD refPtrFlags,
    BSTR* pbstrHelpString,
    DWORD* pdwHelpStringContext,
    BSTR* pbstrHelpStringDll);
HRESULT CALLBACK ITypeLib2_GetAllCustData_Proxy(
    ITypeLib2* This,
    CUSTDATA* pCustData);
void __RPC_STUB ITypeLib2_GetAllCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ITypeLib2_INTERFACE_DEFINED__ */

typedef struct ITypeChangeEvents ITypeChangeEvents;
typedef ITypeChangeEvents *LPTYPECHANGEEVENTS;

typedef enum tagCHANGEKIND {
    CHANGEKIND_ADDMEMBER,
    CHANGEKIND_DELETEMEMBER,
    CHANGEKIND_SETNAMES,
    CHANGEKIND_SETDOCUMENTATION,
    CHANGEKIND_GENERAL,
    CHANGEKIND_INVALIDATE,
    CHANGEKIND_CHANGEFAILED,
    CHANGEKIND_MAX
} CHANGEKIND;

/*****************************************************************************
 * ITypeChangeEvents interface
 */
#ifndef __ITypeChangeEvents_INTERFACE_DEFINED__
#define __ITypeChangeEvents_INTERFACE_DEFINED__

DEFINE_GUID(IID_ITypeChangeEvents, 0x00020410, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ITypeChangeEvents: IUnknown {

    virtual HRESULT CALLBACK RequestTypeChange(
        CHANGEKIND changeKind,
        ITypeInfo* pTInfoBefore,
        LPOLESTR pStrName,
        INT* pfCancel) = 0;

    virtual HRESULT CALLBACK AfterTypeChange(
        CHANGEKIND changeKind,
        ITypeInfo* pTInfoAfter,
        LPOLESTR pStrName) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct ITypeChangeEventsVtbl ITypeChangeEventsVtbl;
struct ITypeChangeEvents {
    const ITypeChangeEventsVtbl* lpVtbl;
};
struct ITypeChangeEventsVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        ITypeChangeEvents* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        ITypeChangeEvents* This);

    ULONG (CALLBACK *Release)(
        ITypeChangeEvents* This);

    /*** ITypeChangeEvents methods ***/
    HRESULT (CALLBACK *RequestTypeChange)(
        ITypeChangeEvents* This,
        CHANGEKIND changeKind,
        ITypeInfo* pTInfoBefore,
        LPOLESTR pStrName,
        INT* pfCancel);

    HRESULT (CALLBACK *AfterTypeChange)(
        ITypeChangeEvents* This,
        CHANGEKIND changeKind,
        ITypeInfo* pTInfoAfter,
        LPOLESTR pStrName);

};

#define ITypeChangeEvents_IMETHODS \
    IUnknown_IMETHODS \
    ICOM_METHOD4 (HRESULT,RequestTypeChange,CHANGEKIND,changeKind,ITypeInfo*,pTInfoBefore,LPOLESTR,pStrName,INT*,pfCancel) \
    ICOM_METHOD3 (HRESULT,AfterTypeChange,CHANGEKIND,changeKind,ITypeInfo*,pTInfoAfter,LPOLESTR,pStrName)

/*** IUnknown methods ***/
#define ITypeChangeEvents_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ITypeChangeEvents_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ITypeChangeEvents_Release(p) (p)->lpVtbl->Release(p)
/*** ITypeChangeEvents methods ***/
#define ITypeChangeEvents_RequestTypeChange(p,a,b,c,d) (p)->lpVtbl->RequestTypeChange(p,a,b,c,d)
#define ITypeChangeEvents_AfterTypeChange(p,a,b,c) (p)->lpVtbl->AfterTypeChange(p,a,b,c)

#endif

HRESULT CALLBACK ITypeChangeEvents_RequestTypeChange_Proxy(
    ITypeChangeEvents* This,
    CHANGEKIND changeKind,
    ITypeInfo* pTInfoBefore,
    LPOLESTR pStrName,
    INT* pfCancel);
void __RPC_STUB ITypeChangeEvents_RequestTypeChange_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeChangeEvents_AfterTypeChange_Proxy(
    ITypeChangeEvents* This,
    CHANGEKIND changeKind,
    ITypeInfo* pTInfoAfter,
    LPOLESTR pStrName);
void __RPC_STUB ITypeChangeEvents_AfterTypeChange_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ITypeChangeEvents_INTERFACE_DEFINED__ */

typedef struct IErrorInfo IErrorInfo;
typedef IErrorInfo *LPERRORINFO;

/*****************************************************************************
 * IErrorInfo interface
 */
#ifndef __IErrorInfo_INTERFACE_DEFINED__
#define __IErrorInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_IErrorInfo, 0x1cf2b120, 0x547d, 0x101b, 0x8e,0x65, 0x08,0x00,0x2b,0x2b,0xd1,0x19);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IErrorInfo: IUnknown {

    virtual HRESULT CALLBACK GetGUID(
        GUID* pGUID) = 0;

    virtual HRESULT CALLBACK GetSource(
        BSTR* pBstrSource) = 0;

    virtual HRESULT CALLBACK GetDescription(
        BSTR* pBstrDescription) = 0;

    virtual HRESULT CALLBACK GetHelpFile(
        BSTR* pBstrHelpFile) = 0;

    virtual HRESULT CALLBACK GetHelpContext(
        DWORD* pdwHelpContext) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct IErrorInfoVtbl IErrorInfoVtbl;
struct IErrorInfo {
    const IErrorInfoVtbl* lpVtbl;
};
struct IErrorInfoVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        IErrorInfo* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        IErrorInfo* This);

    ULONG (CALLBACK *Release)(
        IErrorInfo* This);

    /*** IErrorInfo methods ***/
    HRESULT (CALLBACK *GetGUID)(
        IErrorInfo* This,
        GUID* pGUID);

    HRESULT (CALLBACK *GetSource)(
        IErrorInfo* This,
        BSTR* pBstrSource);

    HRESULT (CALLBACK *GetDescription)(
        IErrorInfo* This,
        BSTR* pBstrDescription);

    HRESULT (CALLBACK *GetHelpFile)(
        IErrorInfo* This,
        BSTR* pBstrHelpFile);

    HRESULT (CALLBACK *GetHelpContext)(
        IErrorInfo* This,
        DWORD* pdwHelpContext);

};

#define IErrorInfo_IMETHODS \
    IUnknown_IMETHODS \
    ICOM_METHOD1 (HRESULT,GetGUID,GUID*,pGUID) \
    ICOM_METHOD1 (HRESULT,GetSource,BSTR*,pBstrSource) \
    ICOM_METHOD1 (HRESULT,GetDescription,BSTR*,pBstrDescription) \
    ICOM_METHOD1 (HRESULT,GetHelpFile,BSTR*,pBstrHelpFile) \
    ICOM_METHOD1 (HRESULT,GetHelpContext,DWORD*,pdwHelpContext)

/*** IUnknown methods ***/
#define IErrorInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IErrorInfo_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IErrorInfo_Release(p) (p)->lpVtbl->Release(p)
/*** IErrorInfo methods ***/
#define IErrorInfo_GetGUID(p,a) (p)->lpVtbl->GetGUID(p,a)
#define IErrorInfo_GetSource(p,a) (p)->lpVtbl->GetSource(p,a)
#define IErrorInfo_GetDescription(p,a) (p)->lpVtbl->GetDescription(p,a)
#define IErrorInfo_GetHelpFile(p,a) (p)->lpVtbl->GetHelpFile(p,a)
#define IErrorInfo_GetHelpContext(p,a) (p)->lpVtbl->GetHelpContext(p,a)

#endif

HRESULT CALLBACK IErrorInfo_GetGUID_Proxy(
    IErrorInfo* This,
    GUID* pGUID);
void __RPC_STUB IErrorInfo_GetGUID_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IErrorInfo_GetSource_Proxy(
    IErrorInfo* This,
    BSTR* pBstrSource);
void __RPC_STUB IErrorInfo_GetSource_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IErrorInfo_GetDescription_Proxy(
    IErrorInfo* This,
    BSTR* pBstrDescription);
void __RPC_STUB IErrorInfo_GetDescription_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IErrorInfo_GetHelpFile_Proxy(
    IErrorInfo* This,
    BSTR* pBstrHelpFile);
void __RPC_STUB IErrorInfo_GetHelpFile_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IErrorInfo_GetHelpContext_Proxy(
    IErrorInfo* This,
    DWORD* pdwHelpContext);
void __RPC_STUB IErrorInfo_GetHelpContext_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IErrorInfo_INTERFACE_DEFINED__ */

typedef struct ICreateErrorInfo ICreateErrorInfo;
typedef ICreateErrorInfo *LPCREATEERRORINFO;

/*****************************************************************************
 * ICreateErrorInfo interface
 */
#ifndef __ICreateErrorInfo_INTERFACE_DEFINED__
#define __ICreateErrorInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_ICreateErrorInfo, 0x22f03340, 0x547d, 0x101b, 0x8e,0x65, 0x08,0x00,0x2b,0x2b,0xd1,0x19);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ICreateErrorInfo: IUnknown {

    virtual HRESULT CALLBACK SetGUID(
        REFGUID rguid) = 0;

    virtual HRESULT CALLBACK SetSource(
        LPOLESTR szSource) = 0;

    virtual HRESULT CALLBACK SetDescription(
        LPOLESTR szDescription) = 0;

    virtual HRESULT CALLBACK SetHelpFile(
        LPOLESTR szHelpFile) = 0;

    virtual HRESULT CALLBACK SetHelpContext(
        DWORD dwHelpContext) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct ICreateErrorInfoVtbl ICreateErrorInfoVtbl;
struct ICreateErrorInfo {
    const ICreateErrorInfoVtbl* lpVtbl;
};
struct ICreateErrorInfoVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        ICreateErrorInfo* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        ICreateErrorInfo* This);

    ULONG (CALLBACK *Release)(
        ICreateErrorInfo* This);

    /*** ICreateErrorInfo methods ***/
    HRESULT (CALLBACK *SetGUID)(
        ICreateErrorInfo* This,
        REFGUID rguid);

    HRESULT (CALLBACK *SetSource)(
        ICreateErrorInfo* This,
        LPOLESTR szSource);

    HRESULT (CALLBACK *SetDescription)(
        ICreateErrorInfo* This,
        LPOLESTR szDescription);

    HRESULT (CALLBACK *SetHelpFile)(
        ICreateErrorInfo* This,
        LPOLESTR szHelpFile);

    HRESULT (CALLBACK *SetHelpContext)(
        ICreateErrorInfo* This,
        DWORD dwHelpContext);

};

#define ICreateErrorInfo_IMETHODS \
    IUnknown_IMETHODS \
    ICOM_METHOD1 (HRESULT,SetGUID,REFGUID,rguid) \
    ICOM_METHOD1 (HRESULT,SetSource,LPOLESTR,szSource) \
    ICOM_METHOD1 (HRESULT,SetDescription,LPOLESTR,szDescription) \
    ICOM_METHOD1 (HRESULT,SetHelpFile,LPOLESTR,szHelpFile) \
    ICOM_METHOD1 (HRESULT,SetHelpContext,DWORD,dwHelpContext)

/*** IUnknown methods ***/
#define ICreateErrorInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ICreateErrorInfo_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ICreateErrorInfo_Release(p) (p)->lpVtbl->Release(p)
/*** ICreateErrorInfo methods ***/
#define ICreateErrorInfo_SetGUID(p,a) (p)->lpVtbl->SetGUID(p,a)
#define ICreateErrorInfo_SetSource(p,a) (p)->lpVtbl->SetSource(p,a)
#define ICreateErrorInfo_SetDescription(p,a) (p)->lpVtbl->SetDescription(p,a)
#define ICreateErrorInfo_SetHelpFile(p,a) (p)->lpVtbl->SetHelpFile(p,a)
#define ICreateErrorInfo_SetHelpContext(p,a) (p)->lpVtbl->SetHelpContext(p,a)

#endif

HRESULT CALLBACK ICreateErrorInfo_SetGUID_Proxy(
    ICreateErrorInfo* This,
    REFGUID rguid);
void __RPC_STUB ICreateErrorInfo_SetGUID_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateErrorInfo_SetSource_Proxy(
    ICreateErrorInfo* This,
    LPOLESTR szSource);
void __RPC_STUB ICreateErrorInfo_SetSource_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateErrorInfo_SetDescription_Proxy(
    ICreateErrorInfo* This,
    LPOLESTR szDescription);
void __RPC_STUB ICreateErrorInfo_SetDescription_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateErrorInfo_SetHelpFile_Proxy(
    ICreateErrorInfo* This,
    LPOLESTR szHelpFile);
void __RPC_STUB ICreateErrorInfo_SetHelpFile_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateErrorInfo_SetHelpContext_Proxy(
    ICreateErrorInfo* This,
    DWORD dwHelpContext);
void __RPC_STUB ICreateErrorInfo_SetHelpContext_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ICreateErrorInfo_INTERFACE_DEFINED__ */

typedef struct ISupportErrorInfo ISupportErrorInfo;
typedef ISupportErrorInfo *LPSUPPORTERRORINFO;

/*****************************************************************************
 * ISupportErrorInfo interface
 */
#ifndef __ISupportErrorInfo_INTERFACE_DEFINED__
#define __ISupportErrorInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_ISupportErrorInfo, 0xdf0b3d60, 0x548f, 0x101b, 0x8e,0x65, 0x08,0x00,0x2b,0x2b,0xd1,0x19);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ISupportErrorInfo: IUnknown {

    virtual HRESULT CALLBACK InterfaceSupportsErrorInfo(
        REFIID riid) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct ISupportErrorInfoVtbl ISupportErrorInfoVtbl;
struct ISupportErrorInfo {
    const ISupportErrorInfoVtbl* lpVtbl;
};
struct ISupportErrorInfoVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        ISupportErrorInfo* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        ISupportErrorInfo* This);

    ULONG (CALLBACK *Release)(
        ISupportErrorInfo* This);

    /*** ISupportErrorInfo methods ***/
    HRESULT (CALLBACK *InterfaceSupportsErrorInfo)(
        ISupportErrorInfo* This,
        REFIID riid);

};

#define ISupportErrorInfo_IMETHODS \
    IUnknown_IMETHODS \
    ICOM_METHOD1 (HRESULT,InterfaceSupportsErrorInfo,REFIID,riid)

/*** IUnknown methods ***/
#define ISupportErrorInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ISupportErrorInfo_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ISupportErrorInfo_Release(p) (p)->lpVtbl->Release(p)
/*** ISupportErrorInfo methods ***/
#define ISupportErrorInfo_InterfaceSupportsErrorInfo(p,a) (p)->lpVtbl->InterfaceSupportsErrorInfo(p,a)

#endif

HRESULT CALLBACK ISupportErrorInfo_InterfaceSupportsErrorInfo_Proxy(
    ISupportErrorInfo* This,
    REFIID riid);
void __RPC_STUB ISupportErrorInfo_InterfaceSupportsErrorInfo_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ISupportErrorInfo_INTERFACE_DEFINED__ */

typedef struct ITypeFactory ITypeFactory;
/*****************************************************************************
 * ITypeFactory interface
 */
#ifndef __ITypeFactory_INTERFACE_DEFINED__
#define __ITypeFactory_INTERFACE_DEFINED__

DEFINE_GUID(IID_ITypeFactory, 0x0000002e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ITypeFactory: IUnknown {

    virtual HRESULT CALLBACK CreateFromTypeInfo(
        ITypeInfo* pTypeInfo,
        REFIID riid,
        IUnknown** ppv) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct ITypeFactoryVtbl ITypeFactoryVtbl;
struct ITypeFactory {
    const ITypeFactoryVtbl* lpVtbl;
};
struct ITypeFactoryVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        ITypeFactory* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        ITypeFactory* This);

    ULONG (CALLBACK *Release)(
        ITypeFactory* This);

    /*** ITypeFactory methods ***/
    HRESULT (CALLBACK *CreateFromTypeInfo)(
        ITypeFactory* This,
        ITypeInfo* pTypeInfo,
        REFIID riid,
        IUnknown** ppv);

};

#define ITypeFactory_IMETHODS \
    IUnknown_IMETHODS \
    ICOM_METHOD3 (HRESULT,CreateFromTypeInfo,ITypeInfo*,pTypeInfo,REFIID,riid,IUnknown**,ppv)

/*** IUnknown methods ***/
#define ITypeFactory_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ITypeFactory_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ITypeFactory_Release(p) (p)->lpVtbl->Release(p)
/*** ITypeFactory methods ***/
#define ITypeFactory_CreateFromTypeInfo(p,a,b,c) (p)->lpVtbl->CreateFromTypeInfo(p,a,b,c)

#endif

HRESULT CALLBACK ITypeFactory_CreateFromTypeInfo_Proxy(
    ITypeFactory* This,
    ITypeInfo* pTypeInfo,
    REFIID riid,
    IUnknown** ppv);
void __RPC_STUB ITypeFactory_CreateFromTypeInfo_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ITypeFactory_INTERFACE_DEFINED__ */

typedef struct ITypeMarshal ITypeMarshal;
/*****************************************************************************
 * ITypeMarshal interface
 */
#ifndef __ITypeMarshal_INTERFACE_DEFINED__
#define __ITypeMarshal_INTERFACE_DEFINED__

DEFINE_GUID(IID_ITypeMarshal, 0x0000002d, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ITypeMarshal: IUnknown {

    virtual HRESULT CALLBACK Size(
        PVOID pvType,
        DWORD dwDestContext,
        PVOID pvDestContext,
        ULONG* pSize) = 0;

    virtual HRESULT CALLBACK Marshal(
        PVOID pvType,
        DWORD dwDestContext,
        PVOID pvDestContext,
        ULONG cbBufferLength,
        BYTE* pBuffer,
        ULONG* pcbWritten) = 0;

    virtual HRESULT CALLBACK Unmarshal(
        PVOID pvType,
        DWORD dwFlags,
        ULONG cbBufferLength,
        BYTE* pBuffer,
        ULONG* pcbRead) = 0;

    virtual HRESULT CALLBACK Free(
        PVOID pvType) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct ITypeMarshalVtbl ITypeMarshalVtbl;
struct ITypeMarshal {
    const ITypeMarshalVtbl* lpVtbl;
};
struct ITypeMarshalVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        ITypeMarshal* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        ITypeMarshal* This);

    ULONG (CALLBACK *Release)(
        ITypeMarshal* This);

    /*** ITypeMarshal methods ***/
    HRESULT (CALLBACK *Size)(
        ITypeMarshal* This,
        PVOID pvType,
        DWORD dwDestContext,
        PVOID pvDestContext,
        ULONG* pSize);

    HRESULT (CALLBACK *Marshal)(
        ITypeMarshal* This,
        PVOID pvType,
        DWORD dwDestContext,
        PVOID pvDestContext,
        ULONG cbBufferLength,
        BYTE* pBuffer,
        ULONG* pcbWritten);

    HRESULT (CALLBACK *Unmarshal)(
        ITypeMarshal* This,
        PVOID pvType,
        DWORD dwFlags,
        ULONG cbBufferLength,
        BYTE* pBuffer,
        ULONG* pcbRead);

    HRESULT (CALLBACK *Free)(
        ITypeMarshal* This,
        PVOID pvType);

};

#define ITypeMarshal_IMETHODS \
    IUnknown_IMETHODS \
    ICOM_METHOD4 (HRESULT,Size,PVOID,pvType,DWORD,dwDestContext,PVOID,pvDestContext,ULONG*,pSize) \
    ICOM_METHOD6 (HRESULT,Marshal,PVOID,pvType,DWORD,dwDestContext,PVOID,pvDestContext,ULONG,cbBufferLength,BYTE*,pBuffer,ULONG*,pcbWritten) \
    ICOM_METHOD5 (HRESULT,Unmarshal,PVOID,pvType,DWORD,dwFlags,ULONG,cbBufferLength,BYTE*,pBuffer,ULONG*,pcbRead) \
    ICOM_METHOD1 (HRESULT,Free,PVOID,pvType)

/*** IUnknown methods ***/
#define ITypeMarshal_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ITypeMarshal_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ITypeMarshal_Release(p) (p)->lpVtbl->Release(p)
/*** ITypeMarshal methods ***/
#define ITypeMarshal_Size(p,a,b,c,d) (p)->lpVtbl->Size(p,a,b,c,d)
#define ITypeMarshal_Marshal(p,a,b,c,d,e,f) (p)->lpVtbl->Marshal(p,a,b,c,d,e,f)
#define ITypeMarshal_Unmarshal(p,a,b,c,d,e) (p)->lpVtbl->Unmarshal(p,a,b,c,d,e)
#define ITypeMarshal_Free(p,a) (p)->lpVtbl->Free(p,a)

#endif

HRESULT CALLBACK ITypeMarshal_Size_Proxy(
    ITypeMarshal* This,
    PVOID pvType,
    DWORD dwDestContext,
    PVOID pvDestContext,
    ULONG* pSize);
void __RPC_STUB ITypeMarshal_Size_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeMarshal_Marshal_Proxy(
    ITypeMarshal* This,
    PVOID pvType,
    DWORD dwDestContext,
    PVOID pvDestContext,
    ULONG cbBufferLength,
    BYTE* pBuffer,
    ULONG* pcbWritten);
void __RPC_STUB ITypeMarshal_Marshal_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeMarshal_Unmarshal_Proxy(
    ITypeMarshal* This,
    PVOID pvType,
    DWORD dwFlags,
    ULONG cbBufferLength,
    BYTE* pBuffer,
    ULONG* pcbRead);
void __RPC_STUB ITypeMarshal_Unmarshal_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ITypeMarshal_Free_Proxy(
    ITypeMarshal* This,
    PVOID pvType);
void __RPC_STUB ITypeMarshal_Free_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ITypeMarshal_INTERFACE_DEFINED__ */

typedef IRecordInfo *LPRECORDINFO;

/*****************************************************************************
 * IRecordInfo interface
 */
#ifndef __IRecordInfo_INTERFACE_DEFINED__
#define __IRecordInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_IRecordInfo, 0x0000002f, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct IRecordInfo: IUnknown {

    virtual HRESULT CALLBACK RecordInit(
        PVOID pvNew) = 0;

    virtual HRESULT CALLBACK RecordClear(
        PVOID pvExisting) = 0;

    virtual HRESULT CALLBACK RecordCopy(
        PVOID pvExisting,
        PVOID pvNew) = 0;

    virtual HRESULT CALLBACK GetGuid(
        GUID* pguid) = 0;

    virtual HRESULT CALLBACK GetName(
        BSTR* pbstrName) = 0;

    virtual HRESULT CALLBACK GetSize(
        ULONG* pcbSize) = 0;

    virtual HRESULT CALLBACK GetTypeInfo(
        ITypeInfo** ppTypeInfo) = 0;

    virtual HRESULT CALLBACK GetField(
        PVOID pvData,
        LPCOLESTR szFieldName,
        VARIANT* pvarField) = 0;

    virtual HRESULT CALLBACK GetFieldNoCopy(
        PVOID pvData,
        LPCOLESTR szFieldName,
        VARIANT* pvarField,
        PVOID* ppvDataCArray) = 0;

    virtual HRESULT CALLBACK PutField(
        ULONG wFlags,
        PVOID pvData,
        LPCOLESTR szFieldName,
        VARIANT* pvarField) = 0;

    virtual HRESULT CALLBACK PutFieldNoCopy(
        ULONG wFlags,
        PVOID pvData,
        LPCOLESTR szFieldName,
        VARIANT* pvarField) = 0;

    virtual HRESULT CALLBACK GetFieldNames(
        ULONG* pcNames,
        BSTR* rgBstrNames) = 0;

    virtual BOOL CALLBACK IsMatchingType(
        IRecordInfo* pRecordInfo) = 0;

    virtual PVOID CALLBACK RecordCreate(
        ) = 0;

    virtual HRESULT CALLBACK RecordCreateCopy(
        PVOID pvSource,
        PVOID* ppvDest) = 0;

    virtual HRESULT CALLBACK RecordDestroy(
        PVOID pvRecord) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct IRecordInfoVtbl IRecordInfoVtbl;
struct IRecordInfo {
    const IRecordInfoVtbl* lpVtbl;
};
struct IRecordInfoVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        IRecordInfo* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        IRecordInfo* This);

    ULONG (CALLBACK *Release)(
        IRecordInfo* This);

    /*** IRecordInfo methods ***/
    HRESULT (CALLBACK *RecordInit)(
        IRecordInfo* This,
        PVOID pvNew);

    HRESULT (CALLBACK *RecordClear)(
        IRecordInfo* This,
        PVOID pvExisting);

    HRESULT (CALLBACK *RecordCopy)(
        IRecordInfo* This,
        PVOID pvExisting,
        PVOID pvNew);

    HRESULT (CALLBACK *GetGuid)(
        IRecordInfo* This,
        GUID* pguid);

    HRESULT (CALLBACK *GetName)(
        IRecordInfo* This,
        BSTR* pbstrName);

    HRESULT (CALLBACK *GetSize)(
        IRecordInfo* This,
        ULONG* pcbSize);

    HRESULT (CALLBACK *GetTypeInfo)(
        IRecordInfo* This,
        ITypeInfo** ppTypeInfo);

    HRESULT (CALLBACK *GetField)(
        IRecordInfo* This,
        PVOID pvData,
        LPCOLESTR szFieldName,
        VARIANT* pvarField);

    HRESULT (CALLBACK *GetFieldNoCopy)(
        IRecordInfo* This,
        PVOID pvData,
        LPCOLESTR szFieldName,
        VARIANT* pvarField,
        PVOID* ppvDataCArray);

    HRESULT (CALLBACK *PutField)(
        IRecordInfo* This,
        ULONG wFlags,
        PVOID pvData,
        LPCOLESTR szFieldName,
        VARIANT* pvarField);

    HRESULT (CALLBACK *PutFieldNoCopy)(
        IRecordInfo* This,
        ULONG wFlags,
        PVOID pvData,
        LPCOLESTR szFieldName,
        VARIANT* pvarField);

    HRESULT (CALLBACK *GetFieldNames)(
        IRecordInfo* This,
        ULONG* pcNames,
        BSTR* rgBstrNames);

    BOOL (CALLBACK *IsMatchingType)(
        IRecordInfo* This,
        IRecordInfo* pRecordInfo);

    PVOID (CALLBACK *RecordCreate)(
        IRecordInfo* This);

    HRESULT (CALLBACK *RecordCreateCopy)(
        IRecordInfo* This,
        PVOID pvSource,
        PVOID* ppvDest);

    HRESULT (CALLBACK *RecordDestroy)(
        IRecordInfo* This,
        PVOID pvRecord);

};

#define IRecordInfo_IMETHODS \
    IUnknown_IMETHODS \
    ICOM_METHOD1 (HRESULT,RecordInit,PVOID,pvNew) \
    ICOM_METHOD1 (HRESULT,RecordClear,PVOID,pvExisting) \
    ICOM_METHOD2 (HRESULT,RecordCopy,PVOID,pvExisting,PVOID,pvNew) \
    ICOM_METHOD1 (HRESULT,GetGuid,GUID*,pguid) \
    ICOM_METHOD1 (HRESULT,GetName,BSTR*,pbstrName) \
    ICOM_METHOD1 (HRESULT,GetSize,ULONG*,pcbSize) \
    ICOM_METHOD1 (HRESULT,GetTypeInfo,ITypeInfo**,ppTypeInfo) \
    ICOM_METHOD3 (HRESULT,GetField,PVOID,pvData,LPCOLESTR,szFieldName,VARIANT*,pvarField) \
    ICOM_METHOD4 (HRESULT,GetFieldNoCopy,PVOID,pvData,LPCOLESTR,szFieldName,VARIANT*,pvarField,PVOID*,ppvDataCArray) \
    ICOM_METHOD4 (HRESULT,PutField,ULONG,wFlags,PVOID,pvData,LPCOLESTR,szFieldName,VARIANT*,pvarField) \
    ICOM_METHOD4 (HRESULT,PutFieldNoCopy,ULONG,wFlags,PVOID,pvData,LPCOLESTR,szFieldName,VARIANT*,pvarField) \
    ICOM_METHOD2 (HRESULT,GetFieldNames,ULONG*,pcNames,BSTR*,rgBstrNames) \
    ICOM_METHOD1 (BOOL,IsMatchingType,IRecordInfo*,pRecordInfo) \
    ICOM_METHOD  (PVOID,RecordCreate) \
    ICOM_METHOD2 (HRESULT,RecordCreateCopy,PVOID,pvSource,PVOID*,ppvDest) \
    ICOM_METHOD1 (HRESULT,RecordDestroy,PVOID,pvRecord)

/*** IUnknown methods ***/
#define IRecordInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define IRecordInfo_AddRef(p) (p)->lpVtbl->AddRef(p)
#define IRecordInfo_Release(p) (p)->lpVtbl->Release(p)
/*** IRecordInfo methods ***/
#define IRecordInfo_RecordInit(p,a) (p)->lpVtbl->RecordInit(p,a)
#define IRecordInfo_RecordClear(p,a) (p)->lpVtbl->RecordClear(p,a)
#define IRecordInfo_RecordCopy(p,a,b) (p)->lpVtbl->RecordCopy(p,a,b)
#define IRecordInfo_GetGuid(p,a) (p)->lpVtbl->GetGuid(p,a)
#define IRecordInfo_GetName(p,a) (p)->lpVtbl->GetName(p,a)
#define IRecordInfo_GetSize(p,a) (p)->lpVtbl->GetSize(p,a)
#define IRecordInfo_GetTypeInfo(p,a) (p)->lpVtbl->GetTypeInfo(p,a)
#define IRecordInfo_GetField(p,a,b,c) (p)->lpVtbl->GetField(p,a,b,c)
#define IRecordInfo_GetFieldNoCopy(p,a,b,c,d) (p)->lpVtbl->GetFieldNoCopy(p,a,b,c,d)
#define IRecordInfo_PutField(p,a,b,c,d) (p)->lpVtbl->PutField(p,a,b,c,d)
#define IRecordInfo_PutFieldNoCopy(p,a,b,c,d) (p)->lpVtbl->PutFieldNoCopy(p,a,b,c,d)
#define IRecordInfo_GetFieldNames(p,a,b) (p)->lpVtbl->GetFieldNames(p,a,b)
#define IRecordInfo_IsMatchingType(p,a) (p)->lpVtbl->IsMatchingType(p,a)
#define IRecordInfo_RecordCreate(p) (p)->lpVtbl->RecordCreate(p)
#define IRecordInfo_RecordCreateCopy(p,a,b) (p)->lpVtbl->RecordCreateCopy(p,a,b)
#define IRecordInfo_RecordDestroy(p,a) (p)->lpVtbl->RecordDestroy(p,a)

#endif

HRESULT CALLBACK IRecordInfo_RecordInit_Proxy(
    IRecordInfo* This,
    PVOID pvNew);
void __RPC_STUB IRecordInfo_RecordInit_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IRecordInfo_RecordClear_Proxy(
    IRecordInfo* This,
    PVOID pvExisting);
void __RPC_STUB IRecordInfo_RecordClear_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IRecordInfo_RecordCopy_Proxy(
    IRecordInfo* This,
    PVOID pvExisting,
    PVOID pvNew);
void __RPC_STUB IRecordInfo_RecordCopy_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IRecordInfo_GetGuid_Proxy(
    IRecordInfo* This,
    GUID* pguid);
void __RPC_STUB IRecordInfo_GetGuid_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IRecordInfo_GetName_Proxy(
    IRecordInfo* This,
    BSTR* pbstrName);
void __RPC_STUB IRecordInfo_GetName_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IRecordInfo_GetSize_Proxy(
    IRecordInfo* This,
    ULONG* pcbSize);
void __RPC_STUB IRecordInfo_GetSize_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IRecordInfo_GetTypeInfo_Proxy(
    IRecordInfo* This,
    ITypeInfo** ppTypeInfo);
void __RPC_STUB IRecordInfo_GetTypeInfo_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IRecordInfo_GetField_Proxy(
    IRecordInfo* This,
    PVOID pvData,
    LPCOLESTR szFieldName,
    VARIANT* pvarField);
void __RPC_STUB IRecordInfo_GetField_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IRecordInfo_GetFieldNoCopy_Proxy(
    IRecordInfo* This,
    PVOID pvData,
    LPCOLESTR szFieldName,
    VARIANT* pvarField,
    PVOID* ppvDataCArray);
void __RPC_STUB IRecordInfo_GetFieldNoCopy_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IRecordInfo_PutField_Proxy(
    IRecordInfo* This,
    ULONG wFlags,
    PVOID pvData,
    LPCOLESTR szFieldName,
    VARIANT* pvarField);
void __RPC_STUB IRecordInfo_PutField_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IRecordInfo_PutFieldNoCopy_Proxy(
    IRecordInfo* This,
    ULONG wFlags,
    PVOID pvData,
    LPCOLESTR szFieldName,
    VARIANT* pvarField);
void __RPC_STUB IRecordInfo_PutFieldNoCopy_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IRecordInfo_GetFieldNames_Proxy(
    IRecordInfo* This,
    ULONG* pcNames,
    BSTR* rgBstrNames);
void __RPC_STUB IRecordInfo_GetFieldNames_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
BOOL CALLBACK IRecordInfo_IsMatchingType_Proxy(
    IRecordInfo* This,
    IRecordInfo* pRecordInfo);
void __RPC_STUB IRecordInfo_IsMatchingType_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
PVOID CALLBACK IRecordInfo_RecordCreate_Proxy(
    IRecordInfo* This);
void __RPC_STUB IRecordInfo_RecordCreate_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IRecordInfo_RecordCreateCopy_Proxy(
    IRecordInfo* This,
    PVOID pvSource,
    PVOID* ppvDest);
void __RPC_STUB IRecordInfo_RecordCreateCopy_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK IRecordInfo_RecordDestroy_Proxy(
    IRecordInfo* This,
    PVOID pvRecord);
void __RPC_STUB IRecordInfo_RecordDestroy_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IRecordInfo_INTERFACE_DEFINED__ */

typedef struct ICreateTypeInfo ICreateTypeInfo;
typedef ICreateTypeInfo *LPCREATETYPEINFO;

/*****************************************************************************
 * ICreateTypeInfo interface
 */
#ifndef __ICreateTypeInfo_INTERFACE_DEFINED__
#define __ICreateTypeInfo_INTERFACE_DEFINED__

DEFINE_GUID(IID_ICreateTypeInfo, 0x00020405, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ICreateTypeInfo: IUnknown {

    virtual HRESULT CALLBACK SetGuid(
        REFGUID guid) = 0;

    virtual HRESULT CALLBACK SetTypeFlags(
        UINT uTypeFlags) = 0;

    virtual HRESULT CALLBACK SetDocString(
        LPOLESTR pStrDoc) = 0;

    virtual HRESULT CALLBACK SetHelpContext(
        DWORD dwHelpContext) = 0;

    virtual HRESULT CALLBACK SetVersion(
        WORD wMajorVerNum,
        WORD wMinorVerNum) = 0;

    virtual HRESULT CALLBACK AddRefTypeInfo(
        ITypeInfo* pTInfo,
        HREFTYPE* phRefType) = 0;

    virtual HRESULT CALLBACK AddFuncDesc(
        UINT index,
        FUNCDESC* pFuncDesc) = 0;

    virtual HRESULT CALLBACK AddImplType(
        UINT index,
        HREFTYPE hRefType) = 0;

    virtual HRESULT CALLBACK SetImplTypeFlags(
        UINT index,
        INT implTypeFlags) = 0;

    virtual HRESULT CALLBACK SetAlignment(
        WORD cbAlignment) = 0;

    virtual HRESULT CALLBACK SetSchema(
        LPOLESTR pStrSchema) = 0;

    virtual HRESULT CALLBACK AddVarDesc(
        UINT index,
        VARDESC* pVarDesc) = 0;

    virtual HRESULT CALLBACK SetFuncAndParamNames(
        UINT index,
        LPOLESTR* rgszNames,
        UINT cNames) = 0;

    virtual HRESULT CALLBACK SetVarName(
        UINT index,
        LPOLESTR szName) = 0;

    virtual HRESULT CALLBACK SetTypeDescAlias(
        TYPEDESC* pTDescAlias) = 0;

    virtual HRESULT CALLBACK DefineFuncAsDllEntry(
        UINT index,
        LPOLESTR szDllName,
        LPOLESTR szProcName) = 0;

    virtual HRESULT CALLBACK SetFuncDocString(
        UINT index,
        LPOLESTR szDocString) = 0;

    virtual HRESULT CALLBACK SetVarDocString(
        UINT index,
        LPOLESTR szDocString) = 0;

    virtual HRESULT CALLBACK SetFuncHelpContext(
        UINT index,
        DWORD dwHelpContext) = 0;

    virtual HRESULT CALLBACK SetVarHelpContext(
        UINT index,
        DWORD dwHelpContext) = 0;

    virtual HRESULT CALLBACK SetMops(
        UINT index,
        BSTR bstrMops) = 0;

    virtual HRESULT CALLBACK SetTypeIdldesc(
        IDLDESC* pIdlDesc) = 0;

    virtual HRESULT CALLBACK LayOut(
        ) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct ICreateTypeInfoVtbl ICreateTypeInfoVtbl;
struct ICreateTypeInfo {
    const ICreateTypeInfoVtbl* lpVtbl;
};
struct ICreateTypeInfoVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        ICreateTypeInfo* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        ICreateTypeInfo* This);

    ULONG (CALLBACK *Release)(
        ICreateTypeInfo* This);

    /*** ICreateTypeInfo methods ***/
    HRESULT (CALLBACK *SetGuid)(
        ICreateTypeInfo* This,
        REFGUID guid);

    HRESULT (CALLBACK *SetTypeFlags)(
        ICreateTypeInfo* This,
        UINT uTypeFlags);

    HRESULT (CALLBACK *SetDocString)(
        ICreateTypeInfo* This,
        LPOLESTR pStrDoc);

    HRESULT (CALLBACK *SetHelpContext)(
        ICreateTypeInfo* This,
        DWORD dwHelpContext);

    HRESULT (CALLBACK *SetVersion)(
        ICreateTypeInfo* This,
        WORD wMajorVerNum,
        WORD wMinorVerNum);

    HRESULT (CALLBACK *AddRefTypeInfo)(
        ICreateTypeInfo* This,
        ITypeInfo* pTInfo,
        HREFTYPE* phRefType);

    HRESULT (CALLBACK *AddFuncDesc)(
        ICreateTypeInfo* This,
        UINT index,
        FUNCDESC* pFuncDesc);

    HRESULT (CALLBACK *AddImplType)(
        ICreateTypeInfo* This,
        UINT index,
        HREFTYPE hRefType);

    HRESULT (CALLBACK *SetImplTypeFlags)(
        ICreateTypeInfo* This,
        UINT index,
        INT implTypeFlags);

    HRESULT (CALLBACK *SetAlignment)(
        ICreateTypeInfo* This,
        WORD cbAlignment);

    HRESULT (CALLBACK *SetSchema)(
        ICreateTypeInfo* This,
        LPOLESTR pStrSchema);

    HRESULT (CALLBACK *AddVarDesc)(
        ICreateTypeInfo* This,
        UINT index,
        VARDESC* pVarDesc);

    HRESULT (CALLBACK *SetFuncAndParamNames)(
        ICreateTypeInfo* This,
        UINT index,
        LPOLESTR* rgszNames,
        UINT cNames);

    HRESULT (CALLBACK *SetVarName)(
        ICreateTypeInfo* This,
        UINT index,
        LPOLESTR szName);

    HRESULT (CALLBACK *SetTypeDescAlias)(
        ICreateTypeInfo* This,
        TYPEDESC* pTDescAlias);

    HRESULT (CALLBACK *DefineFuncAsDllEntry)(
        ICreateTypeInfo* This,
        UINT index,
        LPOLESTR szDllName,
        LPOLESTR szProcName);

    HRESULT (CALLBACK *SetFuncDocString)(
        ICreateTypeInfo* This,
        UINT index,
        LPOLESTR szDocString);

    HRESULT (CALLBACK *SetVarDocString)(
        ICreateTypeInfo* This,
        UINT index,
        LPOLESTR szDocString);

    HRESULT (CALLBACK *SetFuncHelpContext)(
        ICreateTypeInfo* This,
        UINT index,
        DWORD dwHelpContext);

    HRESULT (CALLBACK *SetVarHelpContext)(
        ICreateTypeInfo* This,
        UINT index,
        DWORD dwHelpContext);

    HRESULT (CALLBACK *SetMops)(
        ICreateTypeInfo* This,
        UINT index,
        BSTR bstrMops);

    HRESULT (CALLBACK *SetTypeIdldesc)(
        ICreateTypeInfo* This,
        IDLDESC* pIdlDesc);

    HRESULT (CALLBACK *LayOut)(
        ICreateTypeInfo* This);

};

#define ICreateTypeInfo_IMETHODS \
    IUnknown_IMETHODS \
    ICOM_METHOD1 (HRESULT,SetGuid,REFGUID,guid) \
    ICOM_METHOD1 (HRESULT,SetTypeFlags,UINT,uTypeFlags) \
    ICOM_METHOD1 (HRESULT,SetDocString,LPOLESTR,pStrDoc) \
    ICOM_METHOD1 (HRESULT,SetHelpContext,DWORD,dwHelpContext) \
    ICOM_METHOD2 (HRESULT,SetVersion,WORD,wMajorVerNum,WORD,wMinorVerNum) \
    ICOM_METHOD2 (HRESULT,AddRefTypeInfo,ITypeInfo*,pTInfo,HREFTYPE*,phRefType) \
    ICOM_METHOD2 (HRESULT,AddFuncDesc,UINT,index,FUNCDESC*,pFuncDesc) \
    ICOM_METHOD2 (HRESULT,AddImplType,UINT,index,HREFTYPE,hRefType) \
    ICOM_METHOD2 (HRESULT,SetImplTypeFlags,UINT,index,INT,implTypeFlags) \
    ICOM_METHOD1 (HRESULT,SetAlignment,WORD,cbAlignment) \
    ICOM_METHOD1 (HRESULT,SetSchema,LPOLESTR,pStrSchema) \
    ICOM_METHOD2 (HRESULT,AddVarDesc,UINT,index,VARDESC*,pVarDesc) \
    ICOM_METHOD3 (HRESULT,SetFuncAndParamNames,UINT,index,LPOLESTR*,rgszNames,UINT,cNames) \
    ICOM_METHOD2 (HRESULT,SetVarName,UINT,index,LPOLESTR,szName) \
    ICOM_METHOD1 (HRESULT,SetTypeDescAlias,TYPEDESC*,pTDescAlias) \
    ICOM_METHOD3 (HRESULT,DefineFuncAsDllEntry,UINT,index,LPOLESTR,szDllName,LPOLESTR,szProcName) \
    ICOM_METHOD2 (HRESULT,SetFuncDocString,UINT,index,LPOLESTR,szDocString) \
    ICOM_METHOD2 (HRESULT,SetVarDocString,UINT,index,LPOLESTR,szDocString) \
    ICOM_METHOD2 (HRESULT,SetFuncHelpContext,UINT,index,DWORD,dwHelpContext) \
    ICOM_METHOD2 (HRESULT,SetVarHelpContext,UINT,index,DWORD,dwHelpContext) \
    ICOM_METHOD2 (HRESULT,SetMops,UINT,index,BSTR,bstrMops) \
    ICOM_METHOD1 (HRESULT,SetTypeIdldesc,IDLDESC*,pIdlDesc) \
    ICOM_METHOD  (HRESULT,LayOut)

/*** IUnknown methods ***/
#define ICreateTypeInfo_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ICreateTypeInfo_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ICreateTypeInfo_Release(p) (p)->lpVtbl->Release(p)
/*** ICreateTypeInfo methods ***/
#define ICreateTypeInfo_SetGuid(p,a) (p)->lpVtbl->SetGuid(p,a)
#define ICreateTypeInfo_SetTypeFlags(p,a) (p)->lpVtbl->SetTypeFlags(p,a)
#define ICreateTypeInfo_SetDocString(p,a) (p)->lpVtbl->SetDocString(p,a)
#define ICreateTypeInfo_SetHelpContext(p,a) (p)->lpVtbl->SetHelpContext(p,a)
#define ICreateTypeInfo_SetVersion(p,a,b) (p)->lpVtbl->SetVersion(p,a,b)
#define ICreateTypeInfo_AddRefTypeInfo(p,a,b) (p)->lpVtbl->AddRefTypeInfo(p,a,b)
#define ICreateTypeInfo_AddFuncDesc(p,a,b) (p)->lpVtbl->AddFuncDesc(p,a,b)
#define ICreateTypeInfo_AddImplType(p,a,b) (p)->lpVtbl->AddImplType(p,a,b)
#define ICreateTypeInfo_SetImplTypeFlags(p,a,b) (p)->lpVtbl->SetImplTypeFlags(p,a,b)
#define ICreateTypeInfo_SetAlignment(p,a) (p)->lpVtbl->SetAlignment(p,a)
#define ICreateTypeInfo_SetSchema(p,a) (p)->lpVtbl->SetSchema(p,a)
#define ICreateTypeInfo_AddVarDesc(p,a,b) (p)->lpVtbl->AddVarDesc(p,a,b)
#define ICreateTypeInfo_SetFuncAndParamNames(p,a,b,c) (p)->lpVtbl->SetFuncAndParamNames(p,a,b,c)
#define ICreateTypeInfo_SetVarName(p,a,b) (p)->lpVtbl->SetVarName(p,a,b)
#define ICreateTypeInfo_SetTypeDescAlias(p,a) (p)->lpVtbl->SetTypeDescAlias(p,a)
#define ICreateTypeInfo_DefineFuncAsDllEntry(p,a,b,c) (p)->lpVtbl->DefineFuncAsDllEntry(p,a,b,c)
#define ICreateTypeInfo_SetFuncDocString(p,a,b) (p)->lpVtbl->SetFuncDocString(p,a,b)
#define ICreateTypeInfo_SetVarDocString(p,a,b) (p)->lpVtbl->SetVarDocString(p,a,b)
#define ICreateTypeInfo_SetFuncHelpContext(p,a,b) (p)->lpVtbl->SetFuncHelpContext(p,a,b)
#define ICreateTypeInfo_SetVarHelpContext(p,a,b) (p)->lpVtbl->SetVarHelpContext(p,a,b)
#define ICreateTypeInfo_SetMops(p,a,b) (p)->lpVtbl->SetMops(p,a,b)
#define ICreateTypeInfo_SetTypeIdldesc(p,a) (p)->lpVtbl->SetTypeIdldesc(p,a)
#define ICreateTypeInfo_LayOut(p) (p)->lpVtbl->LayOut(p)

#endif

HRESULT CALLBACK ICreateTypeInfo_SetGuid_Proxy(
    ICreateTypeInfo* This,
    REFGUID guid);
void __RPC_STUB ICreateTypeInfo_SetGuid_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_SetTypeFlags_Proxy(
    ICreateTypeInfo* This,
    UINT uTypeFlags);
void __RPC_STUB ICreateTypeInfo_SetTypeFlags_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_SetDocString_Proxy(
    ICreateTypeInfo* This,
    LPOLESTR pStrDoc);
void __RPC_STUB ICreateTypeInfo_SetDocString_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_SetHelpContext_Proxy(
    ICreateTypeInfo* This,
    DWORD dwHelpContext);
void __RPC_STUB ICreateTypeInfo_SetHelpContext_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_SetVersion_Proxy(
    ICreateTypeInfo* This,
    WORD wMajorVerNum,
    WORD wMinorVerNum);
void __RPC_STUB ICreateTypeInfo_SetVersion_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_AddRefTypeInfo_Proxy(
    ICreateTypeInfo* This,
    ITypeInfo* pTInfo,
    HREFTYPE* phRefType);
void __RPC_STUB ICreateTypeInfo_AddRefTypeInfo_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_AddFuncDesc_Proxy(
    ICreateTypeInfo* This,
    UINT index,
    FUNCDESC* pFuncDesc);
void __RPC_STUB ICreateTypeInfo_AddFuncDesc_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_AddImplType_Proxy(
    ICreateTypeInfo* This,
    UINT index,
    HREFTYPE hRefType);
void __RPC_STUB ICreateTypeInfo_AddImplType_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_SetImplTypeFlags_Proxy(
    ICreateTypeInfo* This,
    UINT index,
    INT implTypeFlags);
void __RPC_STUB ICreateTypeInfo_SetImplTypeFlags_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_SetAlignment_Proxy(
    ICreateTypeInfo* This,
    WORD cbAlignment);
void __RPC_STUB ICreateTypeInfo_SetAlignment_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_SetSchema_Proxy(
    ICreateTypeInfo* This,
    LPOLESTR pStrSchema);
void __RPC_STUB ICreateTypeInfo_SetSchema_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_AddVarDesc_Proxy(
    ICreateTypeInfo* This,
    UINT index,
    VARDESC* pVarDesc);
void __RPC_STUB ICreateTypeInfo_AddVarDesc_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_SetFuncAndParamNames_Proxy(
    ICreateTypeInfo* This,
    UINT index,
    LPOLESTR* rgszNames,
    UINT cNames);
void __RPC_STUB ICreateTypeInfo_SetFuncAndParamNames_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_SetVarName_Proxy(
    ICreateTypeInfo* This,
    UINT index,
    LPOLESTR szName);
void __RPC_STUB ICreateTypeInfo_SetVarName_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_SetTypeDescAlias_Proxy(
    ICreateTypeInfo* This,
    TYPEDESC* pTDescAlias);
void __RPC_STUB ICreateTypeInfo_SetTypeDescAlias_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_DefineFuncAsDllEntry_Proxy(
    ICreateTypeInfo* This,
    UINT index,
    LPOLESTR szDllName,
    LPOLESTR szProcName);
void __RPC_STUB ICreateTypeInfo_DefineFuncAsDllEntry_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_SetFuncDocString_Proxy(
    ICreateTypeInfo* This,
    UINT index,
    LPOLESTR szDocString);
void __RPC_STUB ICreateTypeInfo_SetFuncDocString_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_SetVarDocString_Proxy(
    ICreateTypeInfo* This,
    UINT index,
    LPOLESTR szDocString);
void __RPC_STUB ICreateTypeInfo_SetVarDocString_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_SetFuncHelpContext_Proxy(
    ICreateTypeInfo* This,
    UINT index,
    DWORD dwHelpContext);
void __RPC_STUB ICreateTypeInfo_SetFuncHelpContext_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_SetVarHelpContext_Proxy(
    ICreateTypeInfo* This,
    UINT index,
    DWORD dwHelpContext);
void __RPC_STUB ICreateTypeInfo_SetVarHelpContext_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_SetMops_Proxy(
    ICreateTypeInfo* This,
    UINT index,
    BSTR bstrMops);
void __RPC_STUB ICreateTypeInfo_SetMops_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_SetTypeIdldesc_Proxy(
    ICreateTypeInfo* This,
    IDLDESC* pIdlDesc);
void __RPC_STUB ICreateTypeInfo_SetTypeIdldesc_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo_LayOut_Proxy(
    ICreateTypeInfo* This);
void __RPC_STUB ICreateTypeInfo_LayOut_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ICreateTypeInfo_INTERFACE_DEFINED__ */

typedef struct ICreateTypeInfo2 ICreateTypeInfo2;
typedef ICreateTypeInfo2 *LPCREATETYPEINFO2;

/*****************************************************************************
 * ICreateTypeInfo2 interface
 */
#ifndef __ICreateTypeInfo2_INTERFACE_DEFINED__
#define __ICreateTypeInfo2_INTERFACE_DEFINED__

DEFINE_GUID(IID_ICreateTypeInfo2, 0x0002040e, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ICreateTypeInfo2: ICreateTypeInfo {

    virtual HRESULT CALLBACK DeleteFuncDesc(
        UINT index) = 0;

    virtual HRESULT CALLBACK DeleteFuncDescByMemId(
        MEMBERID memid,
        INVOKEKIND invKind) = 0;

    virtual HRESULT CALLBACK DeleteVarDesc(
        UINT index) = 0;

    virtual HRESULT CALLBACK DeleteVarDescByMemId(
        MEMBERID memid) = 0;

    virtual HRESULT CALLBACK DeleteImplType(
        UINT index) = 0;

    virtual HRESULT CALLBACK SetCustData(
        REFGUID guid,
        VARIANT* pVarVal) = 0;

    virtual HRESULT CALLBACK SetFuncCustData(
        UINT index,
        REFGUID guid,
        VARIANT* pVarVal) = 0;

    virtual HRESULT CALLBACK SetParamCustData(
        UINT indexFunc,
        UINT indexParam,
        REFGUID guid,
        VARIANT* pVarVal) = 0;

    virtual HRESULT CALLBACK SetVarCustData(
        UINT index,
        REFGUID guid,
        VARIANT* pVarVal) = 0;

    virtual HRESULT CALLBACK SetImplTypeCustData(
        UINT index,
        REFGUID guid,
        VARIANT* pVarVal) = 0;

    virtual HRESULT CALLBACK SetHelpStringContext(
        ULONG dwHelpStringContext) = 0;

    virtual HRESULT CALLBACK SetFuncHelpStringContext(
        UINT index,
        ULONG dwHelpStringContext) = 0;

    virtual HRESULT CALLBACK SetVarHelpStringContext(
        UINT index,
        ULONG dwHelpStringContext) = 0;

    virtual HRESULT CALLBACK Invalidate(
        ) = 0;

    virtual HRESULT CALLBACK SetName(
        LPOLESTR szName) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct ICreateTypeInfo2Vtbl ICreateTypeInfo2Vtbl;
struct ICreateTypeInfo2 {
    const ICreateTypeInfo2Vtbl* lpVtbl;
};
struct ICreateTypeInfo2Vtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        ICreateTypeInfo2* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        ICreateTypeInfo2* This);

    ULONG (CALLBACK *Release)(
        ICreateTypeInfo2* This);

    /*** ICreateTypeInfo methods ***/
    HRESULT (CALLBACK *SetGuid)(
        ICreateTypeInfo2* This,
        REFGUID guid);

    HRESULT (CALLBACK *SetTypeFlags)(
        ICreateTypeInfo2* This,
        UINT uTypeFlags);

    HRESULT (CALLBACK *SetDocString)(
        ICreateTypeInfo2* This,
        LPOLESTR pStrDoc);

    HRESULT (CALLBACK *SetHelpContext)(
        ICreateTypeInfo2* This,
        DWORD dwHelpContext);

    HRESULT (CALLBACK *SetVersion)(
        ICreateTypeInfo2* This,
        WORD wMajorVerNum,
        WORD wMinorVerNum);

    HRESULT (CALLBACK *AddRefTypeInfo)(
        ICreateTypeInfo2* This,
        ITypeInfo* pTInfo,
        HREFTYPE* phRefType);

    HRESULT (CALLBACK *AddFuncDesc)(
        ICreateTypeInfo2* This,
        UINT index,
        FUNCDESC* pFuncDesc);

    HRESULT (CALLBACK *AddImplType)(
        ICreateTypeInfo2* This,
        UINT index,
        HREFTYPE hRefType);

    HRESULT (CALLBACK *SetImplTypeFlags)(
        ICreateTypeInfo2* This,
        UINT index,
        INT implTypeFlags);

    HRESULT (CALLBACK *SetAlignment)(
        ICreateTypeInfo2* This,
        WORD cbAlignment);

    HRESULT (CALLBACK *SetSchema)(
        ICreateTypeInfo2* This,
        LPOLESTR pStrSchema);

    HRESULT (CALLBACK *AddVarDesc)(
        ICreateTypeInfo2* This,
        UINT index,
        VARDESC* pVarDesc);

    HRESULT (CALLBACK *SetFuncAndParamNames)(
        ICreateTypeInfo2* This,
        UINT index,
        LPOLESTR* rgszNames,
        UINT cNames);

    HRESULT (CALLBACK *SetVarName)(
        ICreateTypeInfo2* This,
        UINT index,
        LPOLESTR szName);

    HRESULT (CALLBACK *SetTypeDescAlias)(
        ICreateTypeInfo2* This,
        TYPEDESC* pTDescAlias);

    HRESULT (CALLBACK *DefineFuncAsDllEntry)(
        ICreateTypeInfo2* This,
        UINT index,
        LPOLESTR szDllName,
        LPOLESTR szProcName);

    HRESULT (CALLBACK *SetFuncDocString)(
        ICreateTypeInfo2* This,
        UINT index,
        LPOLESTR szDocString);

    HRESULT (CALLBACK *SetVarDocString)(
        ICreateTypeInfo2* This,
        UINT index,
        LPOLESTR szDocString);

    HRESULT (CALLBACK *SetFuncHelpContext)(
        ICreateTypeInfo2* This,
        UINT index,
        DWORD dwHelpContext);

    HRESULT (CALLBACK *SetVarHelpContext)(
        ICreateTypeInfo2* This,
        UINT index,
        DWORD dwHelpContext);

    HRESULT (CALLBACK *SetMops)(
        ICreateTypeInfo2* This,
        UINT index,
        BSTR bstrMops);

    HRESULT (CALLBACK *SetTypeIdldesc)(
        ICreateTypeInfo2* This,
        IDLDESC* pIdlDesc);

    HRESULT (CALLBACK *LayOut)(
        ICreateTypeInfo2* This);

    /*** ICreateTypeInfo2 methods ***/
    HRESULT (CALLBACK *DeleteFuncDesc)(
        ICreateTypeInfo2* This,
        UINT index);

    HRESULT (CALLBACK *DeleteFuncDescByMemId)(
        ICreateTypeInfo2* This,
        MEMBERID memid,
        INVOKEKIND invKind);

    HRESULT (CALLBACK *DeleteVarDesc)(
        ICreateTypeInfo2* This,
        UINT index);

    HRESULT (CALLBACK *DeleteVarDescByMemId)(
        ICreateTypeInfo2* This,
        MEMBERID memid);

    HRESULT (CALLBACK *DeleteImplType)(
        ICreateTypeInfo2* This,
        UINT index);

    HRESULT (CALLBACK *SetCustData)(
        ICreateTypeInfo2* This,
        REFGUID guid,
        VARIANT* pVarVal);

    HRESULT (CALLBACK *SetFuncCustData)(
        ICreateTypeInfo2* This,
        UINT index,
        REFGUID guid,
        VARIANT* pVarVal);

    HRESULT (CALLBACK *SetParamCustData)(
        ICreateTypeInfo2* This,
        UINT indexFunc,
        UINT indexParam,
        REFGUID guid,
        VARIANT* pVarVal);

    HRESULT (CALLBACK *SetVarCustData)(
        ICreateTypeInfo2* This,
        UINT index,
        REFGUID guid,
        VARIANT* pVarVal);

    HRESULT (CALLBACK *SetImplTypeCustData)(
        ICreateTypeInfo2* This,
        UINT index,
        REFGUID guid,
        VARIANT* pVarVal);

    HRESULT (CALLBACK *SetHelpStringContext)(
        ICreateTypeInfo2* This,
        ULONG dwHelpStringContext);

    HRESULT (CALLBACK *SetFuncHelpStringContext)(
        ICreateTypeInfo2* This,
        UINT index,
        ULONG dwHelpStringContext);

    HRESULT (CALLBACK *SetVarHelpStringContext)(
        ICreateTypeInfo2* This,
        UINT index,
        ULONG dwHelpStringContext);

    HRESULT (CALLBACK *Invalidate)(
        ICreateTypeInfo2* This);

    HRESULT (CALLBACK *SetName)(
        ICreateTypeInfo2* This,
        LPOLESTR szName);

};

#define ICreateTypeInfo2_IMETHODS \
    ICreateTypeInfo_IMETHODS \
    ICOM_METHOD1 (HRESULT,DeleteFuncDesc,UINT,index) \
    ICOM_METHOD2 (HRESULT,DeleteFuncDescByMemId,MEMBERID,memid,INVOKEKIND,invKind) \
    ICOM_METHOD1 (HRESULT,DeleteVarDesc,UINT,index) \
    ICOM_METHOD1 (HRESULT,DeleteVarDescByMemId,MEMBERID,memid) \
    ICOM_METHOD1 (HRESULT,DeleteImplType,UINT,index) \
    ICOM_METHOD2 (HRESULT,SetCustData,REFGUID,guid,VARIANT*,pVarVal) \
    ICOM_METHOD3 (HRESULT,SetFuncCustData,UINT,index,REFGUID,guid,VARIANT*,pVarVal) \
    ICOM_METHOD4 (HRESULT,SetParamCustData,UINT,indexFunc,UINT,indexParam,REFGUID,guid,VARIANT*,pVarVal) \
    ICOM_METHOD3 (HRESULT,SetVarCustData,UINT,index,REFGUID,guid,VARIANT*,pVarVal) \
    ICOM_METHOD3 (HRESULT,SetImplTypeCustData,UINT,index,REFGUID,guid,VARIANT*,pVarVal) \
    ICOM_METHOD1 (HRESULT,SetHelpStringContext,ULONG,dwHelpStringContext) \
    ICOM_METHOD2 (HRESULT,SetFuncHelpStringContext,UINT,index,ULONG,dwHelpStringContext) \
    ICOM_METHOD2 (HRESULT,SetVarHelpStringContext,UINT,index,ULONG,dwHelpStringContext) \
    ICOM_METHOD  (HRESULT,Invalidate) \
    ICOM_METHOD1 (HRESULT,SetName,LPOLESTR,szName)

/*** IUnknown methods ***/
#define ICreateTypeInfo2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ICreateTypeInfo2_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ICreateTypeInfo2_Release(p) (p)->lpVtbl->Release(p)
/*** ICreateTypeInfo methods ***/
#define ICreateTypeInfo2_SetGuid(p,a) (p)->lpVtbl->SetGuid(p,a)
#define ICreateTypeInfo2_SetTypeFlags(p,a) (p)->lpVtbl->SetTypeFlags(p,a)
#define ICreateTypeInfo2_SetDocString(p,a) (p)->lpVtbl->SetDocString(p,a)
#define ICreateTypeInfo2_SetHelpContext(p,a) (p)->lpVtbl->SetHelpContext(p,a)
#define ICreateTypeInfo2_SetVersion(p,a,b) (p)->lpVtbl->SetVersion(p,a,b)
#define ICreateTypeInfo2_AddRefTypeInfo(p,a,b) (p)->lpVtbl->AddRefTypeInfo(p,a,b)
#define ICreateTypeInfo2_AddFuncDesc(p,a,b) (p)->lpVtbl->AddFuncDesc(p,a,b)
#define ICreateTypeInfo2_AddImplType(p,a,b) (p)->lpVtbl->AddImplType(p,a,b)
#define ICreateTypeInfo2_SetImplTypeFlags(p,a,b) (p)->lpVtbl->SetImplTypeFlags(p,a,b)
#define ICreateTypeInfo2_SetAlignment(p,a) (p)->lpVtbl->SetAlignment(p,a)
#define ICreateTypeInfo2_SetSchema(p,a) (p)->lpVtbl->SetSchema(p,a)
#define ICreateTypeInfo2_AddVarDesc(p,a,b) (p)->lpVtbl->AddVarDesc(p,a,b)
#define ICreateTypeInfo2_SetFuncAndParamNames(p,a,b,c) (p)->lpVtbl->SetFuncAndParamNames(p,a,b,c)
#define ICreateTypeInfo2_SetVarName(p,a,b) (p)->lpVtbl->SetVarName(p,a,b)
#define ICreateTypeInfo2_SetTypeDescAlias(p,a) (p)->lpVtbl->SetTypeDescAlias(p,a)
#define ICreateTypeInfo2_DefineFuncAsDllEntry(p,a,b,c) (p)->lpVtbl->DefineFuncAsDllEntry(p,a,b,c)
#define ICreateTypeInfo2_SetFuncDocString(p,a,b) (p)->lpVtbl->SetFuncDocString(p,a,b)
#define ICreateTypeInfo2_SetVarDocString(p,a,b) (p)->lpVtbl->SetVarDocString(p,a,b)
#define ICreateTypeInfo2_SetFuncHelpContext(p,a,b) (p)->lpVtbl->SetFuncHelpContext(p,a,b)
#define ICreateTypeInfo2_SetVarHelpContext(p,a,b) (p)->lpVtbl->SetVarHelpContext(p,a,b)
#define ICreateTypeInfo2_SetMops(p,a,b) (p)->lpVtbl->SetMops(p,a,b)
#define ICreateTypeInfo2_SetTypeIdldesc(p,a) (p)->lpVtbl->SetTypeIdldesc(p,a)
#define ICreateTypeInfo2_LayOut(p) (p)->lpVtbl->LayOut(p)
/*** ICreateTypeInfo2 methods ***/
#define ICreateTypeInfo2_DeleteFuncDesc(p,a) (p)->lpVtbl->DeleteFuncDesc(p,a)
#define ICreateTypeInfo2_DeleteFuncDescByMemId(p,a,b) (p)->lpVtbl->DeleteFuncDescByMemId(p,a,b)
#define ICreateTypeInfo2_DeleteVarDesc(p,a) (p)->lpVtbl->DeleteVarDesc(p,a)
#define ICreateTypeInfo2_DeleteVarDescByMemId(p,a) (p)->lpVtbl->DeleteVarDescByMemId(p,a)
#define ICreateTypeInfo2_DeleteImplType(p,a) (p)->lpVtbl->DeleteImplType(p,a)
#define ICreateTypeInfo2_SetCustData(p,a,b) (p)->lpVtbl->SetCustData(p,a,b)
#define ICreateTypeInfo2_SetFuncCustData(p,a,b,c) (p)->lpVtbl->SetFuncCustData(p,a,b,c)
#define ICreateTypeInfo2_SetParamCustData(p,a,b,c,d) (p)->lpVtbl->SetParamCustData(p,a,b,c,d)
#define ICreateTypeInfo2_SetVarCustData(p,a,b,c) (p)->lpVtbl->SetVarCustData(p,a,b,c)
#define ICreateTypeInfo2_SetImplTypeCustData(p,a,b,c) (p)->lpVtbl->SetImplTypeCustData(p,a,b,c)
#define ICreateTypeInfo2_SetHelpStringContext(p,a) (p)->lpVtbl->SetHelpStringContext(p,a)
#define ICreateTypeInfo2_SetFuncHelpStringContext(p,a,b) (p)->lpVtbl->SetFuncHelpStringContext(p,a,b)
#define ICreateTypeInfo2_SetVarHelpStringContext(p,a,b) (p)->lpVtbl->SetVarHelpStringContext(p,a,b)
#define ICreateTypeInfo2_Invalidate(p) (p)->lpVtbl->Invalidate(p)
#define ICreateTypeInfo2_SetName(p,a) (p)->lpVtbl->SetName(p,a)

#endif

HRESULT CALLBACK ICreateTypeInfo2_DeleteFuncDesc_Proxy(
    ICreateTypeInfo2* This,
    UINT index);
void __RPC_STUB ICreateTypeInfo2_DeleteFuncDesc_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo2_DeleteFuncDescByMemId_Proxy(
    ICreateTypeInfo2* This,
    MEMBERID memid,
    INVOKEKIND invKind);
void __RPC_STUB ICreateTypeInfo2_DeleteFuncDescByMemId_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo2_DeleteVarDesc_Proxy(
    ICreateTypeInfo2* This,
    UINT index);
void __RPC_STUB ICreateTypeInfo2_DeleteVarDesc_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo2_DeleteVarDescByMemId_Proxy(
    ICreateTypeInfo2* This,
    MEMBERID memid);
void __RPC_STUB ICreateTypeInfo2_DeleteVarDescByMemId_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo2_DeleteImplType_Proxy(
    ICreateTypeInfo2* This,
    UINT index);
void __RPC_STUB ICreateTypeInfo2_DeleteImplType_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo2_SetCustData_Proxy(
    ICreateTypeInfo2* This,
    REFGUID guid,
    VARIANT* pVarVal);
void __RPC_STUB ICreateTypeInfo2_SetCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo2_SetFuncCustData_Proxy(
    ICreateTypeInfo2* This,
    UINT index,
    REFGUID guid,
    VARIANT* pVarVal);
void __RPC_STUB ICreateTypeInfo2_SetFuncCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo2_SetParamCustData_Proxy(
    ICreateTypeInfo2* This,
    UINT indexFunc,
    UINT indexParam,
    REFGUID guid,
    VARIANT* pVarVal);
void __RPC_STUB ICreateTypeInfo2_SetParamCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo2_SetVarCustData_Proxy(
    ICreateTypeInfo2* This,
    UINT index,
    REFGUID guid,
    VARIANT* pVarVal);
void __RPC_STUB ICreateTypeInfo2_SetVarCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo2_SetImplTypeCustData_Proxy(
    ICreateTypeInfo2* This,
    UINT index,
    REFGUID guid,
    VARIANT* pVarVal);
void __RPC_STUB ICreateTypeInfo2_SetImplTypeCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo2_SetHelpStringContext_Proxy(
    ICreateTypeInfo2* This,
    ULONG dwHelpStringContext);
void __RPC_STUB ICreateTypeInfo2_SetHelpStringContext_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo2_SetFuncHelpStringContext_Proxy(
    ICreateTypeInfo2* This,
    UINT index,
    ULONG dwHelpStringContext);
void __RPC_STUB ICreateTypeInfo2_SetFuncHelpStringContext_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo2_SetVarHelpStringContext_Proxy(
    ICreateTypeInfo2* This,
    UINT index,
    ULONG dwHelpStringContext);
void __RPC_STUB ICreateTypeInfo2_SetVarHelpStringContext_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo2_Invalidate_Proxy(
    ICreateTypeInfo2* This);
void __RPC_STUB ICreateTypeInfo2_Invalidate_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeInfo2_SetName_Proxy(
    ICreateTypeInfo2* This,
    LPOLESTR szName);
void __RPC_STUB ICreateTypeInfo2_SetName_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ICreateTypeInfo2_INTERFACE_DEFINED__ */

typedef struct ICreateTypeLib ICreateTypeLib;
typedef ICreateTypeLib *LPCREATETYPELIB;

/*****************************************************************************
 * ICreateTypeLib interface
 */
#ifndef __ICreateTypeLib_INTERFACE_DEFINED__
#define __ICreateTypeLib_INTERFACE_DEFINED__

DEFINE_GUID(IID_ICreateTypeLib, 0x00020406, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ICreateTypeLib: IUnknown {

    virtual HRESULT CALLBACK CreateTypeInfo(
        LPOLESTR szName,
        TYPEKIND tkind,
        ICreateTypeInfo** ppCTInfo) = 0;

    virtual HRESULT CALLBACK SetName(
        LPOLESTR szName) = 0;

    virtual HRESULT CALLBACK SetVersion(
        WORD wMajorVerNum,
        WORD wMinorVerNum) = 0;

    virtual HRESULT CALLBACK SetGuid(
        REFGUID guid) = 0;

    virtual HRESULT CALLBACK SetDocString(
        LPOLESTR szDoc) = 0;

    virtual HRESULT CALLBACK SetHelpFileName(
        LPOLESTR szHelpFileName) = 0;

    virtual HRESULT CALLBACK SetHelpContext(
        DWORD dwHelpContext) = 0;

    virtual HRESULT CALLBACK SetLcid(
        LCID lcid) = 0;

    virtual HRESULT CALLBACK SetLibFlags(
        UINT uLibFlags) = 0;

    virtual HRESULT CALLBACK SaveAllChanges(
        ) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct ICreateTypeLibVtbl ICreateTypeLibVtbl;
struct ICreateTypeLib {
    const ICreateTypeLibVtbl* lpVtbl;
};
struct ICreateTypeLibVtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        ICreateTypeLib* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        ICreateTypeLib* This);

    ULONG (CALLBACK *Release)(
        ICreateTypeLib* This);

    /*** ICreateTypeLib methods ***/
    HRESULT (CALLBACK *CreateTypeInfo)(
        ICreateTypeLib* This,
        LPOLESTR szName,
        TYPEKIND tkind,
        ICreateTypeInfo** ppCTInfo);

    HRESULT (CALLBACK *SetName)(
        ICreateTypeLib* This,
        LPOLESTR szName);

    HRESULT (CALLBACK *SetVersion)(
        ICreateTypeLib* This,
        WORD wMajorVerNum,
        WORD wMinorVerNum);

    HRESULT (CALLBACK *SetGuid)(
        ICreateTypeLib* This,
        REFGUID guid);

    HRESULT (CALLBACK *SetDocString)(
        ICreateTypeLib* This,
        LPOLESTR szDoc);

    HRESULT (CALLBACK *SetHelpFileName)(
        ICreateTypeLib* This,
        LPOLESTR szHelpFileName);

    HRESULT (CALLBACK *SetHelpContext)(
        ICreateTypeLib* This,
        DWORD dwHelpContext);

    HRESULT (CALLBACK *SetLcid)(
        ICreateTypeLib* This,
        LCID lcid);

    HRESULT (CALLBACK *SetLibFlags)(
        ICreateTypeLib* This,
        UINT uLibFlags);

    HRESULT (CALLBACK *SaveAllChanges)(
        ICreateTypeLib* This);

};

#define ICreateTypeLib_IMETHODS \
    IUnknown_IMETHODS \
    ICOM_METHOD3 (HRESULT,CreateTypeInfo,LPOLESTR,szName,TYPEKIND,tkind,ICreateTypeInfo**,ppCTInfo) \
    ICOM_METHOD1 (HRESULT,SetName,LPOLESTR,szName) \
    ICOM_METHOD2 (HRESULT,SetVersion,WORD,wMajorVerNum,WORD,wMinorVerNum) \
    ICOM_METHOD1 (HRESULT,SetGuid,REFGUID,guid) \
    ICOM_METHOD1 (HRESULT,SetDocString,LPOLESTR,szDoc) \
    ICOM_METHOD1 (HRESULT,SetHelpFileName,LPOLESTR,szHelpFileName) \
    ICOM_METHOD1 (HRESULT,SetHelpContext,DWORD,dwHelpContext) \
    ICOM_METHOD1 (HRESULT,SetLcid,LCID,lcid) \
    ICOM_METHOD1 (HRESULT,SetLibFlags,UINT,uLibFlags) \
    ICOM_METHOD  (HRESULT,SaveAllChanges)

/*** IUnknown methods ***/
#define ICreateTypeLib_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ICreateTypeLib_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ICreateTypeLib_Release(p) (p)->lpVtbl->Release(p)
/*** ICreateTypeLib methods ***/
#define ICreateTypeLib_CreateTypeInfo(p,a,b,c) (p)->lpVtbl->CreateTypeInfo(p,a,b,c)
#define ICreateTypeLib_SetName(p,a) (p)->lpVtbl->SetName(p,a)
#define ICreateTypeLib_SetVersion(p,a,b) (p)->lpVtbl->SetVersion(p,a,b)
#define ICreateTypeLib_SetGuid(p,a) (p)->lpVtbl->SetGuid(p,a)
#define ICreateTypeLib_SetDocString(p,a) (p)->lpVtbl->SetDocString(p,a)
#define ICreateTypeLib_SetHelpFileName(p,a) (p)->lpVtbl->SetHelpFileName(p,a)
#define ICreateTypeLib_SetHelpContext(p,a) (p)->lpVtbl->SetHelpContext(p,a)
#define ICreateTypeLib_SetLcid(p,a) (p)->lpVtbl->SetLcid(p,a)
#define ICreateTypeLib_SetLibFlags(p,a) (p)->lpVtbl->SetLibFlags(p,a)
#define ICreateTypeLib_SaveAllChanges(p) (p)->lpVtbl->SaveAllChanges(p)

#endif

HRESULT CALLBACK ICreateTypeLib_CreateTypeInfo_Proxy(
    ICreateTypeLib* This,
    LPOLESTR szName,
    TYPEKIND tkind,
    ICreateTypeInfo** ppCTInfo);
void __RPC_STUB ICreateTypeLib_CreateTypeInfo_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeLib_SetName_Proxy(
    ICreateTypeLib* This,
    LPOLESTR szName);
void __RPC_STUB ICreateTypeLib_SetName_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeLib_SetVersion_Proxy(
    ICreateTypeLib* This,
    WORD wMajorVerNum,
    WORD wMinorVerNum);
void __RPC_STUB ICreateTypeLib_SetVersion_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeLib_SetGuid_Proxy(
    ICreateTypeLib* This,
    REFGUID guid);
void __RPC_STUB ICreateTypeLib_SetGuid_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeLib_SetDocString_Proxy(
    ICreateTypeLib* This,
    LPOLESTR szDoc);
void __RPC_STUB ICreateTypeLib_SetDocString_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeLib_SetHelpFileName_Proxy(
    ICreateTypeLib* This,
    LPOLESTR szHelpFileName);
void __RPC_STUB ICreateTypeLib_SetHelpFileName_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeLib_SetHelpContext_Proxy(
    ICreateTypeLib* This,
    DWORD dwHelpContext);
void __RPC_STUB ICreateTypeLib_SetHelpContext_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeLib_SetLcid_Proxy(
    ICreateTypeLib* This,
    LCID lcid);
void __RPC_STUB ICreateTypeLib_SetLcid_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeLib_SetLibFlags_Proxy(
    ICreateTypeLib* This,
    UINT uLibFlags);
void __RPC_STUB ICreateTypeLib_SetLibFlags_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeLib_SaveAllChanges_Proxy(
    ICreateTypeLib* This);
void __RPC_STUB ICreateTypeLib_SaveAllChanges_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ICreateTypeLib_INTERFACE_DEFINED__ */

typedef struct ICreateTypeLib2 ICreateTypeLib2;
typedef ICreateTypeLib2 *LPCREATETYPELIB2;

/*****************************************************************************
 * ICreateTypeLib2 interface
 */
#ifndef __ICreateTypeLib2_INTERFACE_DEFINED__
#define __ICreateTypeLib2_INTERFACE_DEFINED__

DEFINE_GUID(IID_ICreateTypeLib2, 0x0002040f, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);
#if defined(__cplusplus) && !defined(CINTERFACE)
struct ICreateTypeLib2: ICreateTypeLib {

    virtual HRESULT CALLBACK DeleteTypeInfo(
        LPOLESTR szName) = 0;

    virtual HRESULT CALLBACK SetCustData(
        REFGUID guid,
        VARIANT* pVarVal) = 0;

    virtual HRESULT CALLBACK SetHelpStringContext(
        ULONG dwHelpStringContext) = 0;

    virtual HRESULT CALLBACK SetHelpStringDll(
        LPOLESTR szFileName) = 0;

} ICOM_COM_INTERFACE_ATTRIBUTE;
#else
typedef struct ICreateTypeLib2Vtbl ICreateTypeLib2Vtbl;
struct ICreateTypeLib2 {
    const ICreateTypeLib2Vtbl* lpVtbl;
};
struct ICreateTypeLib2Vtbl {
    ICOM_MSVTABLE_COMPAT_FIELDS

    /*** IUnknown methods ***/
    HRESULT (CALLBACK *QueryInterface)(
        ICreateTypeLib2* This,
        REFIID riid,
        void** ppvObject);

    ULONG (CALLBACK *AddRef)(
        ICreateTypeLib2* This);

    ULONG (CALLBACK *Release)(
        ICreateTypeLib2* This);

    /*** ICreateTypeLib methods ***/
    HRESULT (CALLBACK *CreateTypeInfo)(
        ICreateTypeLib2* This,
        LPOLESTR szName,
        TYPEKIND tkind,
        ICreateTypeInfo** ppCTInfo);

    HRESULT (CALLBACK *SetName)(
        ICreateTypeLib2* This,
        LPOLESTR szName);

    HRESULT (CALLBACK *SetVersion)(
        ICreateTypeLib2* This,
        WORD wMajorVerNum,
        WORD wMinorVerNum);

    HRESULT (CALLBACK *SetGuid)(
        ICreateTypeLib2* This,
        REFGUID guid);

    HRESULT (CALLBACK *SetDocString)(
        ICreateTypeLib2* This,
        LPOLESTR szDoc);

    HRESULT (CALLBACK *SetHelpFileName)(
        ICreateTypeLib2* This,
        LPOLESTR szHelpFileName);

    HRESULT (CALLBACK *SetHelpContext)(
        ICreateTypeLib2* This,
        DWORD dwHelpContext);

    HRESULT (CALLBACK *SetLcid)(
        ICreateTypeLib2* This,
        LCID lcid);

    HRESULT (CALLBACK *SetLibFlags)(
        ICreateTypeLib2* This,
        UINT uLibFlags);

    HRESULT (CALLBACK *SaveAllChanges)(
        ICreateTypeLib2* This);

    /*** ICreateTypeLib2 methods ***/
    HRESULT (CALLBACK *DeleteTypeInfo)(
        ICreateTypeLib2* This,
        LPOLESTR szName);

    HRESULT (CALLBACK *SetCustData)(
        ICreateTypeLib2* This,
        REFGUID guid,
        VARIANT* pVarVal);

    HRESULT (CALLBACK *SetHelpStringContext)(
        ICreateTypeLib2* This,
        ULONG dwHelpStringContext);

    HRESULT (CALLBACK *SetHelpStringDll)(
        ICreateTypeLib2* This,
        LPOLESTR szFileName);

};

#define ICreateTypeLib2_IMETHODS \
    ICreateTypeLib_IMETHODS \
    ICOM_METHOD1 (HRESULT,DeleteTypeInfo,LPOLESTR,szName) \
    ICOM_METHOD2 (HRESULT,SetCustData,REFGUID,guid,VARIANT*,pVarVal) \
    ICOM_METHOD1 (HRESULT,SetHelpStringContext,ULONG,dwHelpStringContext) \
    ICOM_METHOD1 (HRESULT,SetHelpStringDll,LPOLESTR,szFileName)

/*** IUnknown methods ***/
#define ICreateTypeLib2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
#define ICreateTypeLib2_AddRef(p) (p)->lpVtbl->AddRef(p)
#define ICreateTypeLib2_Release(p) (p)->lpVtbl->Release(p)
/*** ICreateTypeLib methods ***/
#define ICreateTypeLib2_CreateTypeInfo(p,a,b,c) (p)->lpVtbl->CreateTypeInfo(p,a,b,c)
#define ICreateTypeLib2_SetName(p,a) (p)->lpVtbl->SetName(p,a)
#define ICreateTypeLib2_SetVersion(p,a,b) (p)->lpVtbl->SetVersion(p,a,b)
#define ICreateTypeLib2_SetGuid(p,a) (p)->lpVtbl->SetGuid(p,a)
#define ICreateTypeLib2_SetDocString(p,a) (p)->lpVtbl->SetDocString(p,a)
#define ICreateTypeLib2_SetHelpFileName(p,a) (p)->lpVtbl->SetHelpFileName(p,a)
#define ICreateTypeLib2_SetHelpContext(p,a) (p)->lpVtbl->SetHelpContext(p,a)
#define ICreateTypeLib2_SetLcid(p,a) (p)->lpVtbl->SetLcid(p,a)
#define ICreateTypeLib2_SetLibFlags(p,a) (p)->lpVtbl->SetLibFlags(p,a)
#define ICreateTypeLib2_SaveAllChanges(p) (p)->lpVtbl->SaveAllChanges(p)
/*** ICreateTypeLib2 methods ***/
#define ICreateTypeLib2_DeleteTypeInfo(p,a) (p)->lpVtbl->DeleteTypeInfo(p,a)
#define ICreateTypeLib2_SetCustData(p,a,b) (p)->lpVtbl->SetCustData(p,a,b)
#define ICreateTypeLib2_SetHelpStringContext(p,a) (p)->lpVtbl->SetHelpStringContext(p,a)
#define ICreateTypeLib2_SetHelpStringDll(p,a) (p)->lpVtbl->SetHelpStringDll(p,a)

#endif

HRESULT CALLBACK ICreateTypeLib2_DeleteTypeInfo_Proxy(
    ICreateTypeLib2* This,
    LPOLESTR szName);
void __RPC_STUB ICreateTypeLib2_DeleteTypeInfo_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeLib2_SetCustData_Proxy(
    ICreateTypeLib2* This,
    REFGUID guid,
    VARIANT* pVarVal);
void __RPC_STUB ICreateTypeLib2_SetCustData_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeLib2_SetHelpStringContext_Proxy(
    ICreateTypeLib2* This,
    ULONG dwHelpStringContext);
void __RPC_STUB ICreateTypeLib2_SetHelpStringContext_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT CALLBACK ICreateTypeLib2_SetHelpStringDll_Proxy(
    ICreateTypeLib2* This,
    LPOLESTR szFileName);
void __RPC_STUB ICreateTypeLib2_SetHelpStringDll_Stub(
    struct IRpcStubBuffer* This,
    struct IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ICreateTypeLib2_INTERFACE_DEFINED__ */

#ifdef __cplusplus
}
#endif
#endif /* __WIDL_OAIDL_H */
