/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */

#ifndef DO_NO_IMPORTS
import "objidl.idl";
#endif

interface IDispatch;
interface IRecordInfo;
interface ITypeInfo;
interface ITypeLib;

cpp_quote("#ifndef __ICreateTypeInfo_FWD_DEFINED__")
cpp_quote("#define __ICreateTypeInfo_FWD_DEFINED__")
cpp_quote("typedef struct ICreateTypeInfo ICreateTypeInfo;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ICreateTypeInfo2_FWD_DEFINED__")
cpp_quote("#define __ICreateTypeInfo2_FWD_DEFINED__")
cpp_quote("typedef struct ICreateTypeInfo2 ICreateTypeInfo2;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ICreateTypeLib_FWD_DEFINED__")
cpp_quote("#define __ICreateTypeLib_FWD_DEFINED__")
cpp_quote("typedef struct ICreateTypeLib ICreateTypeLib;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ICreateTypeLib2_FWD_DEFINED__")
cpp_quote("#define __ICreateTypeLib2_FWD_DEFINED__")
cpp_quote("typedef struct ICreateTypeLib2 ICreateTypeLib2;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IEnumVARIANT_FWD_DEFINED__")
cpp_quote("#define __IEnumVARIANT_FWD_DEFINED__")
cpp_quote("typedef struct IEnumVARIANT IEnumVARIANT;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ITypeInfo2_FWD_DEFINED__")
cpp_quote("#define __ITypeInfo2_FWD_DEFINED__")
cpp_quote("typedef struct ITypeInfo2 ITypeInfo2;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ITypeLib2_FWD_DEFINED__")
cpp_quote("#define __ITypeLib2_FWD_DEFINED__")
cpp_quote("typedef struct ITypeLib2 ITypeLib2;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ITypeChangeEvents_FWD_DEFINED__")
cpp_quote("#define __ITypeChangeEvents_FWD_DEFINED__")
cpp_quote("typedef struct ITypeChangeEvents ITypeChangeEvents;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IErrorInfo_FWD_DEFINED__")
cpp_quote("#define __IErrorInfo_FWD_DEFINED__")
cpp_quote("typedef struct IErrorInfo IErrorInfo;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ICreateErrorInfo_FWD_DEFINED__")
cpp_quote("#define __ICreateErrorInfo_FWD_DEFINED__")
cpp_quote("typedef struct ICreateErrorInfo ICreateErrorInfo;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISupportErrorInfo_FWD_DEFINED__")
cpp_quote("#define __ISupportErrorInfo_FWD_DEFINED__")
cpp_quote("typedef struct ISupportErrorInfo ISupportErrorInfo;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ITypeFactory_FWD_DEFINED__")
cpp_quote("#define __ITypeFactory_FWD_DEFINED__")
cpp_quote("typedef struct ITypeFactory ITypeFactory;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ITypeMarshal_FWD_DEFINED__")
cpp_quote("#define __ITypeMarshal_FWD_DEFINED__")
cpp_quote("typedef struct ITypeMarshal ITypeMarshal;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IPropertyBag_FWD_DEFINED__")
cpp_quote("#define __IPropertyBag_FWD_DEFINED__")
cpp_quote("typedef struct IPropertyBag IPropertyBag;")
cpp_quote("#endif")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_oaidl_0000_v0_0_c_ifspec;")
cpp_quote("  extern RPC_IF_HANDLE __MIDL_itf_oaidl_0000_v0_0_s_ifspec;")

[
    version(1.0),
    pointer_default(unique)
]
interface IOleAutomationTypes
{

typedef CY CURRENCY;

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

typedef [unique] struct _wireVARIANT *wireVARIANT;
typedef [unique] struct _wireBRECORD *wireBRECORD;

typedef struct _wireSAFEARR_BSTR {
    ULONG Size;
    [size_is(Size), ref] wireBSTR *aBstr;
} SAFEARR_BSTR;

typedef struct _wireSAFEARR_UNKNOWN {
    ULONG Size;
    [size_is(Size), ref] IUnknown **apUnknown;
} SAFEARR_UNKNOWN;

typedef struct _wireSAFEARR_DISPATCH {
    ULONG Size;
    [size_is(Size), ref] IDispatch **apDispatch;
} SAFEARR_DISPATCH;

typedef struct _wireSAFEARR_VARIANT {
    ULONG Size;
    [size_is(Size), ref] wireVARIANT *aVariant;
} SAFEARR_VARIANT;

typedef struct _wireSAFEARR_BRECORD {
    ULONG Size;
    [size_is(Size), ref] wireBRECORD *aRecord;
} SAFEARR_BRECORD;

typedef struct _wireSAFEARR_HAVEIID {
    ULONG Size;
    [size_is(Size), ref] IUnknown **apUnknown;
    IID iid;
} SAFEARR_HAVEIID;

typedef [v1_enum] 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 union _wireSAFEARRAY_UNION switch(ULONG sfType) u {
 case SF_BSTR: SAFEARR_BSTR BstrStr;
 case SF_UNKNOWN: SAFEARR_UNKNOWN UnknownStr;
 case SF_DISPATCH: SAFEARR_DISPATCH DispatchStr;
 case SF_VARIANT: SAFEARR_VARIANT VariantStr;
 case SF_RECORD: SAFEARR_BRECORD RecordStr;
 case SF_HAVEIID: SAFEARR_HAVEIID HaveIidStr;
 case SF_I1: BYTE_SIZEDARR ByteStr;
 case SF_I2: WORD_SIZEDARR WordStr;
 case SF_I4: DWORD_SIZEDARR LongStr;
 case SF_I8: HYPER_SIZEDARR HyperStr;
} SAFEARRAYUNION;

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

typedef [unique] wireSAFEARRAY *wirePSAFEARRAY;

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

typedef [wire_marshal(wirePSAFEARRAY)] SAFEARRAY *LPSAFEARRAY;

cpp_quote("#define FADF_AUTO (0x1)")
cpp_quote("#define FADF_STATIC (0x2)")
cpp_quote("#define FADF_EMBEDDED (0x4)")
cpp_quote("#define FADF_FIXEDSIZE (0x10)")
cpp_quote("#define FADF_RECORD (0x20)")
cpp_quote("#define FADF_HAVEIID (0x40)")
cpp_quote("#define FADF_HAVEVARTYPE (0x80)")
cpp_quote("#define FADF_BSTR (0x100)")
cpp_quote("#define FADF_UNKNOWN (0x200)")
cpp_quote("#define FADF_DISPATCH (0x400)")
cpp_quote("#define FADF_VARIANT (0x800)")
cpp_quote("#define FADF_RESERVED (0xf008)")

cpp_quote("#if defined(NONAMELESSUNION)")
cpp_quote("#define __VARIANT_NAME_1 n1")
cpp_quote("#define __VARIANT_NAME_2 n2")
cpp_quote("#define __VARIANT_NAME_3 n3")
cpp_quote("#define __VARIANT_NAME_4 brecVal")
cpp_quote("#else")
cpp_quote("#define __tagVARIANT")
cpp_quote("#define __VARIANT_NAME_1")
cpp_quote("#define __VARIANT_NAME_2")
cpp_quote("#define __VARIANT_NAME_3")
cpp_quote("#define __tagBRECORD")
cpp_quote("#define __VARIANT_NAME_4")
cpp_quote("#endif")

typedef [wire_marshal(wireVARIANT)] struct tagVARIANT VARIANT;

struct tagVARIANT {
    union {
        struct __tagVARIANT {
            VARTYPE vt;
            WORD wReserved1;
            WORD wReserved2;
            WORD wReserved3;
            union {
                LONGLONG llVal;
                LONG lVal;
                BYTE bVal;
                SHORT iVal;
                FLOAT fltVal;
                DOUBLE dblVal;
                VARIANT_BOOL boolVal;
                /* _VARIANT_BOOL bool; */
                SCODE scode;
                CY cyVal;
                DATE date;
                BSTR bstrVal;
                IUnknown *punkVal;
                IDispatch *pdispVal;
                SAFEARRAY *parray;
                BYTE *pbVal;
                SHORT *piVal;
                LONG *plVal;
                LONGLONG *pllVal;
                FLOAT *pfltVal;
                DOUBLE *pdblVal;
                VARIANT_BOOL *pboolVal;
                /* _VARIANT_BOOL *pbool; */
                SCODE *pscode;
                CY *pcyVal;
                DATE *pdate;
                BSTR *pbstrVal;
                IUnknown **ppunkVal;
                IDispatch **ppdispVal;
                SAFEARRAY **pparray;
                VARIANT *pvarVal;
                PVOID byref;
                CHAR cVal;
                USHORT uiVal;
                ULONG ulVal;
                ULONGLONG ullVal;
                INT intVal;
                UINT uintVal;
                DECIMAL *pdecVal;
                CHAR *pcVal;
                USHORT *puiVal;
                ULONG *pulVal;
                ULONGLONG *pullVal;
                INT *pintVal;
                UINT *puintVal;
                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 VARIANT *LPVARIANTARG;

struct _wireBRECORD {
    ULONG fFlags;
    ULONG clSize;
    IRecordInfo *pRecInfo;
    [size_is(clSize)] byte *pRecord;
};

struct _wireVARIANT {
    DWORD clSize;
    DWORD rpcReserved;
    USHORT vt;
    USHORT wReserved1;
    USHORT wReserved2;
    USHORT wReserved3;
    [switch_type(ULONG), switch_is(vt)] union {
        [case(VT_I8)] LONGLONG llVal;
        [case(VT_I4)] LONG lVal;
        [case(VT_UI1)] BYTE bVal;
        [case(VT_I2)] SHORT iVal;
        [case(VT_R4)] FLOAT fltVal;
        [case(VT_R8)] DOUBLE dblVal;
        [case(VT_BOOL)] VARIANT_BOOL boolVal;
        [case(VT_ERROR)] SCODE scode;
        [case(VT_CY)] CY cyVal;
        [case(VT_DATE)] DATE date;
        [case(VT_BSTR)] wireBSTR bstrVal;
        [case(VT_UNKNOWN)] IUnknown *punkVal;
        [case(VT_DISPATCH)] IDispatch *pdispVal;
        [case(VT_ARRAY)] wirePSAFEARRAY parray;
        [case(VT_RECORD, VT_RECORD|VT_BYREF)] wireBRECORD brecVal;
        [case(VT_UI1|VT_BYREF)] BYTE *pbVal;
        [case(VT_I2|VT_BYREF)] SHORT *piVal;
        [case(VT_I4|VT_BYREF)] LONG *plVal;
        [case(VT_I8|VT_BYREF)] LONGLONG *pllVal;
        [case(VT_R4|VT_BYREF)] FLOAT *pfltVal;
        [case(VT_R8|VT_BYREF)] DOUBLE *pdblVal;
        [case(VT_BOOL|VT_BYREF)] VARIANT_BOOL *pboolVal;
        [case(VT_ERROR|VT_BYREF)] SCODE *pscode;
        [case(VT_CY|VT_BYREF)] CY *pcyVal;
        [case(VT_DATE|VT_BYREF)] DATE *pdate;
        [case(VT_BSTR|VT_BYREF)] wireBSTR *pbstrVal;
        [case(VT_UNKNOWN|VT_BYREF)] IUnknown **ppunkVal;
        [case(VT_DISPATCH|VT_BYREF)] IDispatch **ppdispVal;
        [case(VT_ARRAY|VT_BYREF)] wirePSAFEARRAY *pparray;
        [case(VT_VARIANT|VT_BYREF)] wireVARIANT *pvarVal;
        [case(VT_I1)] CHAR cVal;
        [case(VT_UI2)] USHORT uiVal;
        [case(VT_UI4)] ULONG ulVal;
        [case(VT_UI8)] ULONGLONG ullVal;
        [case(VT_INT)] INT intVal;
        [case(VT_UINT)] UINT uintVal;
        [case(VT_DECIMAL)] DECIMAL decVal;
        [case(VT_DECIMAL|VT_BYREF)] DECIMAL *pdecVal;
        [case(VT_I1|VT_BYREF)] CHAR *pcVal;
        [case(VT_UI2|VT_BYREF)] USHORT *puiVal;
        [case(VT_UI4|VT_BYREF)] ULONG *pulVal;
        [case(VT_UI8|VT_BYREF)] ULONGLONG *pullVal;
        [case(VT_INT|VT_BYREF)] INT *pintVal;
        [case(VT_UINT|VT_BYREF)] UINT *puintVal;
        [case(VT_EMPTY)] ;
        [case(VT_NULL)] ;
    } DUMMYUNIONNAME;
};

cpp_quote("#ifndef DEFINED_DISPID_MEMBERID")
cpp_quote("#define DEFINED_DISPID_MEMBERID")
typedef LONG DISPID;
typedef DISPID MEMBERID;
typedef DWORD HREFTYPE;
cpp_quote("#endif")

typedef [v1_enum] 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 {
    [switch_type(VARTYPE), switch_is(vt)] union {
        [case(VT_PTR, VT_SAFEARRAY)] struct tagTYPEDESC *lptdesc;
        [case(VT_CARRAY)] struct tagARRAYDESC *lpadesc;
        [case(VT_USERDEFINED)] HREFTYPE hreftype;
        [default] ;
    } DUMMYUNIONNAME;
    VARTYPE vt;
} TYPEDESC;

typedef struct tagARRAYDESC {
    TYPEDESC tdescElem;
    USHORT cDims;
    [size_is(cDims)] SAFEARRAYBOUND rgbounds[];
} ARRAYDESC;

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

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

const USHORT PARAMFLAG_NONE = 0;
const USHORT PARAMFLAG_FIN = 0x1;
const USHORT PARAMFLAG_FOUT = 0x2;
const USHORT PARAMFLAG_FLCID = 0x4;
const USHORT PARAMFLAG_FRETVAL = 0x8;
const USHORT PARAMFLAG_FOPT = 0x10;
const USHORT PARAMFLAG_FHASDEFAULT = 0x20;
const USHORT PARAMFLAG_FHASCUSTDATA = 0x40;

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

const USHORT IDLFLAG_NONE = PARAMFLAG_NONE;
const USHORT IDLFLAG_FIN = PARAMFLAG_FIN;
const USHORT IDLFLAG_FOUT = PARAMFLAG_FOUT;
const USHORT IDLFLAG_FLCID = PARAMFLAG_FLCID;
const USHORT IDLFLAG_FRETVAL = PARAMFLAG_FRETVAL;

cpp_quote("#if 0")

typedef struct tagELEMDESC {
    TYPEDESC tdesc;
    PARAMDESC paramdesc;
} ELEMDESC;

cpp_quote("#else")

cpp_quote("  typedef struct tagELEMDESC {")
cpp_quote("    TYPEDESC tdesc;")
cpp_quote("    __C89_NAMELESS union {")
cpp_quote("      IDLDESC idldesc;")
cpp_quote("      PARAMDESC paramdesc;")
cpp_quote("    } DUMMYUNIONNAME;")
cpp_quote("  } ELEMDESC,*LPELEMDESC;")

cpp_quote("#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 {
    [size_is(cArgs)] VARIANTARG *rgvarg;
    [size_is(cNamedArgs)] DISPID *rgdispidNamedArgs;
    UINT cArgs;
    UINT cNamedArgs;
} DISPPARAMS;

cpp_quote("#if 0")

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

cpp_quote("#else")

cpp_quote("typedef struct tagEXCEPINFO {")
cpp_quote("    WORD wCode;")
cpp_quote("    WORD wReserved;")
cpp_quote("    BSTR bstrSource;")
cpp_quote("    BSTR bstrDescription;")
cpp_quote("    BSTR bstrHelpFile;")
cpp_quote("    DWORD dwHelpContext;")
cpp_quote("    PVOID pvReserved;")
cpp_quote("    HRESULT (WINAPI *pfnDeferredFillIn)(struct tagEXCEPINFO *);")
cpp_quote("    SCODE scode;")
cpp_quote("} EXCEPINFO,*LPEXCEPINFO;")

cpp_quote("#endif")

typedef [v1_enum] enum tagCALLCONV {
    CC_FASTCALL = 0,
    CC_CDECL = 1,
    CC_MSCPASCAL = 2,
    CC_PASCAL = CC_MSCPASCAL,
    CC_MACPASCAL = 3,
    CC_STDCALL = 4,
    CC_FPFASTCALL = 5,
    CC_SYSCALL = 6,
    CC_MPWCDECL = 7,
    CC_MPWPASCAL = 8,
    CC_MAX = 9
} CALLCONV;

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

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

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

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

const USHORT IMPLTYPEFLAG_FDEFAULT = 0x1;
const USHORT IMPLTYPEFLAG_FSOURCE = 0x2;
const USHORT IMPLTYPEFLAG_FRESTRICTED = 0x4;
const USHORT IMPLTYPEFLAG_FDEFAULTVTABLE = 0x8;

typedef struct tagVARDESC {
    MEMBERID memid;
    LPOLESTR lpstrSchema;
    [switch_type(VARKIND), switch_is(varkind)] union {
        [case(VAR_PERINSTANCE, VAR_DISPATCH, VAR_STATIC)] ULONG oInst;
        [case(VAR_CONST)] VARIANT *lpvarValue;
    } DUMMYUNIONNAME;
    ELEMDESC elemdescVar;
    WORD wVarFlags;
    VARKIND varkind;
} VARDESC, *LPVARDESC;

cpp_quote("  typedef enum tagTYPEFLAGS {")
cpp_quote("    TYPEFLAG_FAPPOBJECT = 0x1,TYPEFLAG_FCANCREATE = 0x2,TYPEFLAG_FLICENSED = 0x4,")
cpp_quote("    TYPEFLAG_FPREDECLID = 0x8,TYPEFLAG_FHIDDEN = 0x10,")
cpp_quote("    TYPEFLAG_FCONTROL = 0x20,TYPEFLAG_FDUAL = 0x40,TYPEFLAG_FNONEXTENSIBLE = 0x80,")
cpp_quote("    TYPEFLAG_FOLEAUTOMATION = 0x100,TYPEFLAG_FRESTRICTED = 0x200,")
cpp_quote("    TYPEFLAG_FAGGREGATABLE = 0x400,TYPEFLAG_FREPLACEABLE = 0x800,")
cpp_quote("    TYPEFLAG_FDISPATCHABLE = 0x1000,TYPEFLAG_FREVERSEBIND = 0x2000,")
cpp_quote("    TYPEFLAG_FPROXY = 0x4000")
cpp_quote("  } TYPEFLAGS;")
cpp_quote("")
cpp_quote("  typedef enum tagFUNCFLAGS {")
cpp_quote("    FUNCFLAG_FRESTRICTED = 0x1,FUNCFLAG_FSOURCE = 0x2,FUNCFLAG_FBINDABLE = 0x4,")
cpp_quote("    FUNCFLAG_FREQUESTEDIT = 0x8,FUNCFLAG_FDISPLAYBIND = 0x10,")
cpp_quote("    FUNCFLAG_FDEFAULTBIND = 0x20,FUNCFLAG_FHIDDEN = 0x40,")
cpp_quote("    FUNCFLAG_FUSESGETLASTERROR = 0x80,FUNCFLAG_FDEFAULTCOLLELEM = 0x100,")
cpp_quote("    FUNCFLAG_FUIDEFAULT = 0x200,")
cpp_quote("    FUNCFLAG_FNONBROWSABLE = 0x400,FUNCFLAG_FREPLACEABLE = 0x800,")
cpp_quote("    FUNCFLAG_FIMMEDIATEBIND = 0x1000")
cpp_quote("  } FUNCFLAGS;")
cpp_quote("")
cpp_quote("  typedef enum tagVARFLAGS {")
cpp_quote("    VARFLAG_FREADONLY = 0x1,VARFLAG_FSOURCE = 0x2,VARFLAG_FBINDABLE = 0x4,")
cpp_quote("    VARFLAG_FREQUESTEDIT = 0x8,VARFLAG_FDISPLAYBIND = 0x10,")
cpp_quote("    VARFLAG_FDEFAULTBIND = 0x20,VARFLAG_FHIDDEN = 0x40,VARFLAG_FRESTRICTED = 0x80,")
cpp_quote("    VARFLAG_FDEFAULTCOLLELEM = 0x100,VARFLAG_FUIDEFAULT = 0x200,")
cpp_quote("    VARFLAG_FNONBROWSABLE = 0x400,VARFLAG_FREPLACEABLE = 0x800,VARFLAG_FIMMEDIATEBIND = 0x1000")
cpp_quote("  } VARFLAGS;")

typedef [wire_marshal(DWORD)] struct tagCLEANLOCALSTORAGE {
    IUnknown *pInterface;
    PVOID pStorage;
    DWORD flags;
} CLEANLOCALSTORAGE;

cpp_quote("  typedef struct tagCUSTDATAITEM {")
cpp_quote("    GUID guid;")
cpp_quote("    VARIANTARG varValue;")
cpp_quote("  } CUSTDATAITEM;")
cpp_quote("")
cpp_quote("  typedef struct tagCUSTDATAITEM *LPCUSTDATAITEM;")
cpp_quote("")
cpp_quote("  typedef struct tagCUSTDATA {")
cpp_quote("    DWORD cCustData;")
cpp_quote("    LPCUSTDATAITEM prgCustData;")
cpp_quote("  } CUSTDATA;")
cpp_quote("")
cpp_quote("  typedef struct tagCUSTDATA *LPCUSTDATA;")

}

cpp_quote("#ifndef __ICreateTypeInfo_INTERFACE_DEFINED__")
cpp_quote("#define __ICreateTypeInfo_INTERFACE_DEFINED__")
cpp_quote("#ifndef DEFINE_LPCREATETYPEINFO")
cpp_quote("#define DEFINE_LPCREATETYPEINFO")
cpp_quote("  typedef ICreateTypeInfo *LPCREATETYPEINFO;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_ICreateTypeInfo;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ICreateTypeInfo : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SetGuid(REFGUID guid) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetTypeFlags(UINT uTypeFlags) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetDocString(LPOLESTR pStrDoc) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetHelpContext(DWORD dwHelpContext) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetVersion(WORD wMajorVerNum,WORD wMinorVerNum) = 0;")
cpp_quote("    virtual HRESULT WINAPI AddRefTypeInfo(ITypeInfo *pTInfo,HREFTYPE *phRefType) = 0;")
cpp_quote("    virtual HRESULT WINAPI AddFuncDesc(UINT index,FUNCDESC *pFuncDesc) = 0;")
cpp_quote("    virtual HRESULT WINAPI AddImplType(UINT index,HREFTYPE hRefType) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetImplTypeFlags(UINT index,INT implTypeFlags) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetAlignment(WORD cbAlignment) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetSchema(LPOLESTR pStrSchema) = 0;")
cpp_quote("    virtual HRESULT WINAPI AddVarDesc(UINT index,VARDESC *pVarDesc) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetFuncAndParamNames(UINT index,LPOLESTR *rgszNames,UINT cNames) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetVarName(UINT index,LPOLESTR szName) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetTypeDescAlias(TYPEDESC *pTDescAlias) = 0;")
cpp_quote("    virtual HRESULT WINAPI DefineFuncAsDllEntry(UINT index,LPOLESTR szDllName,LPOLESTR szProcName) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetFuncDocString(UINT index,LPOLESTR szDocString) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetVarDocString(UINT index,LPOLESTR szDocString) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetFuncHelpContext(UINT index,DWORD dwHelpContext) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetVarHelpContext(UINT index,DWORD dwHelpContext) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetMops(UINT index,BSTR bstrMops) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetTypeIdldesc(IDLDESC *pIdlDesc) = 0;")
cpp_quote("    virtual HRESULT WINAPI LayOut(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ICreateTypeInfoVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ICreateTypeInfo *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ICreateTypeInfo *This);")
cpp_quote("      ULONG (WINAPI *Release)(ICreateTypeInfo *This);")
cpp_quote("      HRESULT (WINAPI *SetGuid)(ICreateTypeInfo *This,REFGUID guid);")
cpp_quote("      HRESULT (WINAPI *SetTypeFlags)(ICreateTypeInfo *This,UINT uTypeFlags);")
cpp_quote("      HRESULT (WINAPI *SetDocString)(ICreateTypeInfo *This,LPOLESTR pStrDoc);")
cpp_quote("      HRESULT (WINAPI *SetHelpContext)(ICreateTypeInfo *This,DWORD dwHelpContext);")
cpp_quote("      HRESULT (WINAPI *SetVersion)(ICreateTypeInfo *This,WORD wMajorVerNum,WORD wMinorVerNum);")
cpp_quote("      HRESULT (WINAPI *AddRefTypeInfo)(ICreateTypeInfo *This,ITypeInfo *pTInfo,HREFTYPE *phRefType);")
cpp_quote("      HRESULT (WINAPI *AddFuncDesc)(ICreateTypeInfo *This,UINT index,FUNCDESC *pFuncDesc);")
cpp_quote("      HRESULT (WINAPI *AddImplType)(ICreateTypeInfo *This,UINT index,HREFTYPE hRefType);")
cpp_quote("      HRESULT (WINAPI *SetImplTypeFlags)(ICreateTypeInfo *This,UINT index,INT implTypeFlags);")
cpp_quote("      HRESULT (WINAPI *SetAlignment)(ICreateTypeInfo *This,WORD cbAlignment);")
cpp_quote("      HRESULT (WINAPI *SetSchema)(ICreateTypeInfo *This,LPOLESTR pStrSchema);")
cpp_quote("      HRESULT (WINAPI *AddVarDesc)(ICreateTypeInfo *This,UINT index,VARDESC *pVarDesc);")
cpp_quote("      HRESULT (WINAPI *SetFuncAndParamNames)(ICreateTypeInfo *This,UINT index,LPOLESTR *rgszNames,UINT cNames);")
cpp_quote("      HRESULT (WINAPI *SetVarName)(ICreateTypeInfo *This,UINT index,LPOLESTR szName);")
cpp_quote("      HRESULT (WINAPI *SetTypeDescAlias)(ICreateTypeInfo *This,TYPEDESC *pTDescAlias);")
cpp_quote("      HRESULT (WINAPI *DefineFuncAsDllEntry)(ICreateTypeInfo *This,UINT index,LPOLESTR szDllName,LPOLESTR szProcName);")
cpp_quote("      HRESULT (WINAPI *SetFuncDocString)(ICreateTypeInfo *This,UINT index,LPOLESTR szDocString);")
cpp_quote("      HRESULT (WINAPI *SetVarDocString)(ICreateTypeInfo *This,UINT index,LPOLESTR szDocString);")
cpp_quote("      HRESULT (WINAPI *SetFuncHelpContext)(ICreateTypeInfo *This,UINT index,DWORD dwHelpContext);")
cpp_quote("      HRESULT (WINAPI *SetVarHelpContext)(ICreateTypeInfo *This,UINT index,DWORD dwHelpContext);")
cpp_quote("      HRESULT (WINAPI *SetMops)(ICreateTypeInfo *This,UINT index,BSTR bstrMops);")
cpp_quote("      HRESULT (WINAPI *SetTypeIdldesc)(ICreateTypeInfo *This,IDLDESC *pIdlDesc);")
cpp_quote("      HRESULT (WINAPI *LayOut)(ICreateTypeInfo *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ICreateTypeInfoVtbl;")
cpp_quote("  struct ICreateTypeInfo {")
cpp_quote("    CONST_VTBL struct ICreateTypeInfoVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ICreateTypeInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ICreateTypeInfo_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ICreateTypeInfo_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ICreateTypeInfo_SetGuid(This,guid) (This)->lpVtbl->SetGuid(This,guid)")
cpp_quote("#define ICreateTypeInfo_SetTypeFlags(This,uTypeFlags) (This)->lpVtbl->SetTypeFlags(This,uTypeFlags)")
cpp_quote("#define ICreateTypeInfo_SetDocString(This,pStrDoc) (This)->lpVtbl->SetDocString(This,pStrDoc)")
cpp_quote("#define ICreateTypeInfo_SetHelpContext(This,dwHelpContext) (This)->lpVtbl->SetHelpContext(This,dwHelpContext)")
cpp_quote("#define ICreateTypeInfo_SetVersion(This,wMajorVerNum,wMinorVerNum) (This)->lpVtbl->SetVersion(This,wMajorVerNum,wMinorVerNum)")
cpp_quote("#define ICreateTypeInfo_AddRefTypeInfo(This,pTInfo,phRefType) (This)->lpVtbl->AddRefTypeInfo(This,pTInfo,phRefType)")
cpp_quote("#define ICreateTypeInfo_AddFuncDesc(This,index,pFuncDesc) (This)->lpVtbl->AddFuncDesc(This,index,pFuncDesc)")
cpp_quote("#define ICreateTypeInfo_AddImplType(This,index,hRefType) (This)->lpVtbl->AddImplType(This,index,hRefType)")
cpp_quote("#define ICreateTypeInfo_SetImplTypeFlags(This,index,implTypeFlags) (This)->lpVtbl->SetImplTypeFlags(This,index,implTypeFlags)")
cpp_quote("#define ICreateTypeInfo_SetAlignment(This,cbAlignment) (This)->lpVtbl->SetAlignment(This,cbAlignment)")
cpp_quote("#define ICreateTypeInfo_SetSchema(This,pStrSchema) (This)->lpVtbl->SetSchema(This,pStrSchema)")
cpp_quote("#define ICreateTypeInfo_AddVarDesc(This,index,pVarDesc) (This)->lpVtbl->AddVarDesc(This,index,pVarDesc)")
cpp_quote("#define ICreateTypeInfo_SetFuncAndParamNames(This,index,rgszNames,cNames) (This)->lpVtbl->SetFuncAndParamNames(This,index,rgszNames,cNames)")
cpp_quote("#define ICreateTypeInfo_SetVarName(This,index,szName) (This)->lpVtbl->SetVarName(This,index,szName)")
cpp_quote("#define ICreateTypeInfo_SetTypeDescAlias(This,pTDescAlias) (This)->lpVtbl->SetTypeDescAlias(This,pTDescAlias)")
cpp_quote("#define ICreateTypeInfo_DefineFuncAsDllEntry(This,index,szDllName,szProcName) (This)->lpVtbl->DefineFuncAsDllEntry(This,index,szDllName,szProcName)")
cpp_quote("#define ICreateTypeInfo_SetFuncDocString(This,index,szDocString) (This)->lpVtbl->SetFuncDocString(This,index,szDocString)")
cpp_quote("#define ICreateTypeInfo_SetVarDocString(This,index,szDocString) (This)->lpVtbl->SetVarDocString(This,index,szDocString)")
cpp_quote("#define ICreateTypeInfo_SetFuncHelpContext(This,index,dwHelpContext) (This)->lpVtbl->SetFuncHelpContext(This,index,dwHelpContext)")
cpp_quote("#define ICreateTypeInfo_SetVarHelpContext(This,index,dwHelpContext) (This)->lpVtbl->SetVarHelpContext(This,index,dwHelpContext)")
cpp_quote("#define ICreateTypeInfo_SetMops(This,index,bstrMops) (This)->lpVtbl->SetMops(This,index,bstrMops)")
cpp_quote("#define ICreateTypeInfo_SetTypeIdldesc(This,pIdlDesc) (This)->lpVtbl->SetTypeIdldesc(This,pIdlDesc)")
cpp_quote("#define ICreateTypeInfo_LayOut(This) (This)->lpVtbl->LayOut(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_SetGuid_Proxy(ICreateTypeInfo *This,REFGUID guid);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_SetGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_SetTypeFlags_Proxy(ICreateTypeInfo *This,UINT uTypeFlags);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_SetTypeFlags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_SetDocString_Proxy(ICreateTypeInfo *This,LPOLESTR pStrDoc);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_SetDocString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_SetHelpContext_Proxy(ICreateTypeInfo *This,DWORD dwHelpContext);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_SetHelpContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_SetVersion_Proxy(ICreateTypeInfo *This,WORD wMajorVerNum,WORD wMinorVerNum);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_SetVersion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_AddRefTypeInfo_Proxy(ICreateTypeInfo *This,ITypeInfo *pTInfo,HREFTYPE *phRefType);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_AddRefTypeInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_AddFuncDesc_Proxy(ICreateTypeInfo *This,UINT index,FUNCDESC *pFuncDesc);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_AddFuncDesc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_AddImplType_Proxy(ICreateTypeInfo *This,UINT index,HREFTYPE hRefType);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_AddImplType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_SetImplTypeFlags_Proxy(ICreateTypeInfo *This,UINT index,INT implTypeFlags);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_SetImplTypeFlags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_SetAlignment_Proxy(ICreateTypeInfo *This,WORD cbAlignment);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_SetAlignment_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_SetSchema_Proxy(ICreateTypeInfo *This,LPOLESTR pStrSchema);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_SetSchema_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_AddVarDesc_Proxy(ICreateTypeInfo *This,UINT index,VARDESC *pVarDesc);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_AddVarDesc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_SetFuncAndParamNames_Proxy(ICreateTypeInfo *This,UINT index,LPOLESTR *rgszNames,UINT cNames);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_SetFuncAndParamNames_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_SetVarName_Proxy(ICreateTypeInfo *This,UINT index,LPOLESTR szName);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_SetVarName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_SetTypeDescAlias_Proxy(ICreateTypeInfo *This,TYPEDESC *pTDescAlias);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_SetTypeDescAlias_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_DefineFuncAsDllEntry_Proxy(ICreateTypeInfo *This,UINT index,LPOLESTR szDllName,LPOLESTR szProcName);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_DefineFuncAsDllEntry_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_SetFuncDocString_Proxy(ICreateTypeInfo *This,UINT index,LPOLESTR szDocString);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_SetFuncDocString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_SetVarDocString_Proxy(ICreateTypeInfo *This,UINT index,LPOLESTR szDocString);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_SetVarDocString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_SetFuncHelpContext_Proxy(ICreateTypeInfo *This,UINT index,DWORD dwHelpContext);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_SetFuncHelpContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_SetVarHelpContext_Proxy(ICreateTypeInfo *This,UINT index,DWORD dwHelpContext);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_SetVarHelpContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_SetMops_Proxy(ICreateTypeInfo *This,UINT index,BSTR bstrMops);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_SetMops_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_SetTypeIdldesc_Proxy(ICreateTypeInfo *This,IDLDESC *pIdlDesc);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_SetTypeIdldesc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo_LayOut_Proxy(ICreateTypeInfo *This);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo_LayOut_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ICreateTypeInfo2_INTERFACE_DEFINED__")
cpp_quote("#define __ICreateTypeInfo2_INTERFACE_DEFINED__")
cpp_quote("  typedef ICreateTypeInfo2 *LPCREATETYPEINFO2;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_ICreateTypeInfo2;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ICreateTypeInfo2 : public ICreateTypeInfo {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI DeleteFuncDesc(UINT index) = 0;")
cpp_quote("    virtual HRESULT WINAPI DeleteFuncDescByMemId(MEMBERID memid,INVOKEKIND invKind) = 0;")
cpp_quote("    virtual HRESULT WINAPI DeleteVarDesc(UINT index) = 0;")
cpp_quote("    virtual HRESULT WINAPI DeleteVarDescByMemId(MEMBERID memid) = 0;")
cpp_quote("    virtual HRESULT WINAPI DeleteImplType(UINT index) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetCustData(REFGUID guid,VARIANT *pVarVal) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetFuncCustData(UINT index,REFGUID guid,VARIANT *pVarVal) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetParamCustData(UINT indexFunc,UINT indexParam,REFGUID guid,VARIANT *pVarVal) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetVarCustData(UINT index,REFGUID guid,VARIANT *pVarVal) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetImplTypeCustData(UINT index,REFGUID guid,VARIANT *pVarVal) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetHelpStringContext(ULONG dwHelpStringContext) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetFuncHelpStringContext(UINT index,ULONG dwHelpStringContext) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetVarHelpStringContext(UINT index,ULONG dwHelpStringContext) = 0;")
cpp_quote("    virtual HRESULT WINAPI Invalidate(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetName(LPOLESTR szName) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ICreateTypeInfo2Vtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ICreateTypeInfo2 *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ICreateTypeInfo2 *This);")
cpp_quote("      ULONG (WINAPI *Release)(ICreateTypeInfo2 *This);")
cpp_quote("      HRESULT (WINAPI *SetGuid)(ICreateTypeInfo2 *This,REFGUID guid);")
cpp_quote("      HRESULT (WINAPI *SetTypeFlags)(ICreateTypeInfo2 *This,UINT uTypeFlags);")
cpp_quote("      HRESULT (WINAPI *SetDocString)(ICreateTypeInfo2 *This,LPOLESTR pStrDoc);")
cpp_quote("      HRESULT (WINAPI *SetHelpContext)(ICreateTypeInfo2 *This,DWORD dwHelpContext);")
cpp_quote("      HRESULT (WINAPI *SetVersion)(ICreateTypeInfo2 *This,WORD wMajorVerNum,WORD wMinorVerNum);")
cpp_quote("      HRESULT (WINAPI *AddRefTypeInfo)(ICreateTypeInfo2 *This,ITypeInfo *pTInfo,HREFTYPE *phRefType);")
cpp_quote("      HRESULT (WINAPI *AddFuncDesc)(ICreateTypeInfo2 *This,UINT index,FUNCDESC *pFuncDesc);")
cpp_quote("      HRESULT (WINAPI *AddImplType)(ICreateTypeInfo2 *This,UINT index,HREFTYPE hRefType);")
cpp_quote("      HRESULT (WINAPI *SetImplTypeFlags)(ICreateTypeInfo2 *This,UINT index,INT implTypeFlags);")
cpp_quote("      HRESULT (WINAPI *SetAlignment)(ICreateTypeInfo2 *This,WORD cbAlignment);")
cpp_quote("      HRESULT (WINAPI *SetSchema)(ICreateTypeInfo2 *This,LPOLESTR pStrSchema);")
cpp_quote("      HRESULT (WINAPI *AddVarDesc)(ICreateTypeInfo2 *This,UINT index,VARDESC *pVarDesc);")
cpp_quote("      HRESULT (WINAPI *SetFuncAndParamNames)(ICreateTypeInfo2 *This,UINT index,LPOLESTR *rgszNames,UINT cNames);")
cpp_quote("      HRESULT (WINAPI *SetVarName)(ICreateTypeInfo2 *This,UINT index,LPOLESTR szName);")
cpp_quote("      HRESULT (WINAPI *SetTypeDescAlias)(ICreateTypeInfo2 *This,TYPEDESC *pTDescAlias);")
cpp_quote("      HRESULT (WINAPI *DefineFuncAsDllEntry)(ICreateTypeInfo2 *This,UINT index,LPOLESTR szDllName,LPOLESTR szProcName);")
cpp_quote("      HRESULT (WINAPI *SetFuncDocString)(ICreateTypeInfo2 *This,UINT index,LPOLESTR szDocString);")
cpp_quote("      HRESULT (WINAPI *SetVarDocString)(ICreateTypeInfo2 *This,UINT index,LPOLESTR szDocString);")
cpp_quote("      HRESULT (WINAPI *SetFuncHelpContext)(ICreateTypeInfo2 *This,UINT index,DWORD dwHelpContext);")
cpp_quote("      HRESULT (WINAPI *SetVarHelpContext)(ICreateTypeInfo2 *This,UINT index,DWORD dwHelpContext);")
cpp_quote("      HRESULT (WINAPI *SetMops)(ICreateTypeInfo2 *This,UINT index,BSTR bstrMops);")
cpp_quote("      HRESULT (WINAPI *SetTypeIdldesc)(ICreateTypeInfo2 *This,IDLDESC *pIdlDesc);")
cpp_quote("      HRESULT (WINAPI *LayOut)(ICreateTypeInfo2 *This);")
cpp_quote("      HRESULT (WINAPI *DeleteFuncDesc)(ICreateTypeInfo2 *This,UINT index);")
cpp_quote("      HRESULT (WINAPI *DeleteFuncDescByMemId)(ICreateTypeInfo2 *This,MEMBERID memid,INVOKEKIND invKind);")
cpp_quote("      HRESULT (WINAPI *DeleteVarDesc)(ICreateTypeInfo2 *This,UINT index);")
cpp_quote("      HRESULT (WINAPI *DeleteVarDescByMemId)(ICreateTypeInfo2 *This,MEMBERID memid);")
cpp_quote("      HRESULT (WINAPI *DeleteImplType)(ICreateTypeInfo2 *This,UINT index);")
cpp_quote("      HRESULT (WINAPI *SetCustData)(ICreateTypeInfo2 *This,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("      HRESULT (WINAPI *SetFuncCustData)(ICreateTypeInfo2 *This,UINT index,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("      HRESULT (WINAPI *SetParamCustData)(ICreateTypeInfo2 *This,UINT indexFunc,UINT indexParam,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("      HRESULT (WINAPI *SetVarCustData)(ICreateTypeInfo2 *This,UINT index,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("      HRESULT (WINAPI *SetImplTypeCustData)(ICreateTypeInfo2 *This,UINT index,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("      HRESULT (WINAPI *SetHelpStringContext)(ICreateTypeInfo2 *This,ULONG dwHelpStringContext);")
cpp_quote("      HRESULT (WINAPI *SetFuncHelpStringContext)(ICreateTypeInfo2 *This,UINT index,ULONG dwHelpStringContext);")
cpp_quote("      HRESULT (WINAPI *SetVarHelpStringContext)(ICreateTypeInfo2 *This,UINT index,ULONG dwHelpStringContext);")
cpp_quote("      HRESULT (WINAPI *Invalidate)(ICreateTypeInfo2 *This);")
cpp_quote("      HRESULT (WINAPI *SetName)(ICreateTypeInfo2 *This,LPOLESTR szName);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ICreateTypeInfo2Vtbl;")
cpp_quote("  struct ICreateTypeInfo2 {")
cpp_quote("    CONST_VTBL struct ICreateTypeInfo2Vtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ICreateTypeInfo2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ICreateTypeInfo2_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ICreateTypeInfo2_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ICreateTypeInfo2_SetGuid(This,guid) (This)->lpVtbl->SetGuid(This,guid)")
cpp_quote("#define ICreateTypeInfo2_SetTypeFlags(This,uTypeFlags) (This)->lpVtbl->SetTypeFlags(This,uTypeFlags)")
cpp_quote("#define ICreateTypeInfo2_SetDocString(This,pStrDoc) (This)->lpVtbl->SetDocString(This,pStrDoc)")
cpp_quote("#define ICreateTypeInfo2_SetHelpContext(This,dwHelpContext) (This)->lpVtbl->SetHelpContext(This,dwHelpContext)")
cpp_quote("#define ICreateTypeInfo2_SetVersion(This,wMajorVerNum,wMinorVerNum) (This)->lpVtbl->SetVersion(This,wMajorVerNum,wMinorVerNum)")
cpp_quote("#define ICreateTypeInfo2_AddRefTypeInfo(This,pTInfo,phRefType) (This)->lpVtbl->AddRefTypeInfo(This,pTInfo,phRefType)")
cpp_quote("#define ICreateTypeInfo2_AddFuncDesc(This,index,pFuncDesc) (This)->lpVtbl->AddFuncDesc(This,index,pFuncDesc)")
cpp_quote("#define ICreateTypeInfo2_AddImplType(This,index,hRefType) (This)->lpVtbl->AddImplType(This,index,hRefType)")
cpp_quote("#define ICreateTypeInfo2_SetImplTypeFlags(This,index,implTypeFlags) (This)->lpVtbl->SetImplTypeFlags(This,index,implTypeFlags)")
cpp_quote("#define ICreateTypeInfo2_SetAlignment(This,cbAlignment) (This)->lpVtbl->SetAlignment(This,cbAlignment)")
cpp_quote("#define ICreateTypeInfo2_SetSchema(This,pStrSchema) (This)->lpVtbl->SetSchema(This,pStrSchema)")
cpp_quote("#define ICreateTypeInfo2_AddVarDesc(This,index,pVarDesc) (This)->lpVtbl->AddVarDesc(This,index,pVarDesc)")
cpp_quote("#define ICreateTypeInfo2_SetFuncAndParamNames(This,index,rgszNames,cNames) (This)->lpVtbl->SetFuncAndParamNames(This,index,rgszNames,cNames)")
cpp_quote("#define ICreateTypeInfo2_SetVarName(This,index,szName) (This)->lpVtbl->SetVarName(This,index,szName)")
cpp_quote("#define ICreateTypeInfo2_SetTypeDescAlias(This,pTDescAlias) (This)->lpVtbl->SetTypeDescAlias(This,pTDescAlias)")
cpp_quote("#define ICreateTypeInfo2_DefineFuncAsDllEntry(This,index,szDllName,szProcName) (This)->lpVtbl->DefineFuncAsDllEntry(This,index,szDllName,szProcName)")
cpp_quote("#define ICreateTypeInfo2_SetFuncDocString(This,index,szDocString) (This)->lpVtbl->SetFuncDocString(This,index,szDocString)")
cpp_quote("#define ICreateTypeInfo2_SetVarDocString(This,index,szDocString) (This)->lpVtbl->SetVarDocString(This,index,szDocString)")
cpp_quote("#define ICreateTypeInfo2_SetFuncHelpContext(This,index,dwHelpContext) (This)->lpVtbl->SetFuncHelpContext(This,index,dwHelpContext)")
cpp_quote("#define ICreateTypeInfo2_SetVarHelpContext(This,index,dwHelpContext) (This)->lpVtbl->SetVarHelpContext(This,index,dwHelpContext)")
cpp_quote("#define ICreateTypeInfo2_SetMops(This,index,bstrMops) (This)->lpVtbl->SetMops(This,index,bstrMops)")
cpp_quote("#define ICreateTypeInfo2_SetTypeIdldesc(This,pIdlDesc) (This)->lpVtbl->SetTypeIdldesc(This,pIdlDesc)")
cpp_quote("#define ICreateTypeInfo2_LayOut(This) (This)->lpVtbl->LayOut(This)")
cpp_quote("#define ICreateTypeInfo2_DeleteFuncDesc(This,index) (This)->lpVtbl->DeleteFuncDesc(This,index)")
cpp_quote("#define ICreateTypeInfo2_DeleteFuncDescByMemId(This,memid,invKind) (This)->lpVtbl->DeleteFuncDescByMemId(This,memid,invKind)")
cpp_quote("#define ICreateTypeInfo2_DeleteVarDesc(This,index) (This)->lpVtbl->DeleteVarDesc(This,index)")
cpp_quote("#define ICreateTypeInfo2_DeleteVarDescByMemId(This,memid) (This)->lpVtbl->DeleteVarDescByMemId(This,memid)")
cpp_quote("#define ICreateTypeInfo2_DeleteImplType(This,index) (This)->lpVtbl->DeleteImplType(This,index)")
cpp_quote("#define ICreateTypeInfo2_SetCustData(This,guid,pVarVal) (This)->lpVtbl->SetCustData(This,guid,pVarVal)")
cpp_quote("#define ICreateTypeInfo2_SetFuncCustData(This,index,guid,pVarVal) (This)->lpVtbl->SetFuncCustData(This,index,guid,pVarVal)")
cpp_quote("#define ICreateTypeInfo2_SetParamCustData(This,indexFunc,indexParam,guid,pVarVal) (This)->lpVtbl->SetParamCustData(This,indexFunc,indexParam,guid,pVarVal)")
cpp_quote("#define ICreateTypeInfo2_SetVarCustData(This,index,guid,pVarVal) (This)->lpVtbl->SetVarCustData(This,index,guid,pVarVal)")
cpp_quote("#define ICreateTypeInfo2_SetImplTypeCustData(This,index,guid,pVarVal) (This)->lpVtbl->SetImplTypeCustData(This,index,guid,pVarVal)")
cpp_quote("#define ICreateTypeInfo2_SetHelpStringContext(This,dwHelpStringContext) (This)->lpVtbl->SetHelpStringContext(This,dwHelpStringContext)")
cpp_quote("#define ICreateTypeInfo2_SetFuncHelpStringContext(This,index,dwHelpStringContext) (This)->lpVtbl->SetFuncHelpStringContext(This,index,dwHelpStringContext)")
cpp_quote("#define ICreateTypeInfo2_SetVarHelpStringContext(This,index,dwHelpStringContext) (This)->lpVtbl->SetVarHelpStringContext(This,index,dwHelpStringContext)")
cpp_quote("#define ICreateTypeInfo2_Invalidate(This) (This)->lpVtbl->Invalidate(This)")
cpp_quote("#define ICreateTypeInfo2_SetName(This,szName) (This)->lpVtbl->SetName(This,szName)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo2_DeleteFuncDesc_Proxy(ICreateTypeInfo2 *This,UINT index);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo2_DeleteFuncDesc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo2_DeleteFuncDescByMemId_Proxy(ICreateTypeInfo2 *This,MEMBERID memid,INVOKEKIND invKind);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo2_DeleteFuncDescByMemId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo2_DeleteVarDesc_Proxy(ICreateTypeInfo2 *This,UINT index);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo2_DeleteVarDesc_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo2_DeleteVarDescByMemId_Proxy(ICreateTypeInfo2 *This,MEMBERID memid);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo2_DeleteVarDescByMemId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo2_DeleteImplType_Proxy(ICreateTypeInfo2 *This,UINT index);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo2_DeleteImplType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo2_SetCustData_Proxy(ICreateTypeInfo2 *This,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo2_SetCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo2_SetFuncCustData_Proxy(ICreateTypeInfo2 *This,UINT index,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo2_SetFuncCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo2_SetParamCustData_Proxy(ICreateTypeInfo2 *This,UINT indexFunc,UINT indexParam,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo2_SetParamCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo2_SetVarCustData_Proxy(ICreateTypeInfo2 *This,UINT index,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo2_SetVarCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo2_SetImplTypeCustData_Proxy(ICreateTypeInfo2 *This,UINT index,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo2_SetImplTypeCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo2_SetHelpStringContext_Proxy(ICreateTypeInfo2 *This,ULONG dwHelpStringContext);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo2_SetHelpStringContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo2_SetFuncHelpStringContext_Proxy(ICreateTypeInfo2 *This,UINT index,ULONG dwHelpStringContext);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo2_SetFuncHelpStringContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo2_SetVarHelpStringContext_Proxy(ICreateTypeInfo2 *This,UINT index,ULONG dwHelpStringContext);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo2_SetVarHelpStringContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo2_Invalidate_Proxy(ICreateTypeInfo2 *This);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo2_Invalidate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeInfo2_SetName_Proxy(ICreateTypeInfo2 *This,LPOLESTR szName);")
cpp_quote("  void __RPC_STUB ICreateTypeInfo2_SetName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ICreateTypeLib_INTERFACE_DEFINED__")
cpp_quote("#define __ICreateTypeLib_INTERFACE_DEFINED__")
cpp_quote("#ifndef DEFINED_LPCREATETYPELIB")
cpp_quote("#define DEFINED_LPCREATETYPELIB")
cpp_quote("  typedef ICreateTypeLib *LPCREATETYPELIB;")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_ICreateTypeLib;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ICreateTypeLib : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI CreateTypeInfo(LPOLESTR szName,TYPEKIND tkind,ICreateTypeInfo **ppCTInfo) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetName(LPOLESTR szName) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetVersion(WORD wMajorVerNum,WORD wMinorVerNum) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetGuid(REFGUID guid) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetDocString(LPOLESTR szDoc) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetHelpFileName(LPOLESTR szHelpFileName) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetHelpContext(DWORD dwHelpContext) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetLcid(LCID lcid) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetLibFlags(UINT uLibFlags) = 0;")
cpp_quote("    virtual HRESULT WINAPI SaveAllChanges(void) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ICreateTypeLibVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ICreateTypeLib *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ICreateTypeLib *This);")
cpp_quote("      ULONG (WINAPI *Release)(ICreateTypeLib *This);")
cpp_quote("      HRESULT (WINAPI *CreateTypeInfo)(ICreateTypeLib *This,LPOLESTR szName,TYPEKIND tkind,ICreateTypeInfo **ppCTInfo);")
cpp_quote("      HRESULT (WINAPI *SetName)(ICreateTypeLib *This,LPOLESTR szName);")
cpp_quote("      HRESULT (WINAPI *SetVersion)(ICreateTypeLib *This,WORD wMajorVerNum,WORD wMinorVerNum);")
cpp_quote("      HRESULT (WINAPI *SetGuid)(ICreateTypeLib *This,REFGUID guid);")
cpp_quote("      HRESULT (WINAPI *SetDocString)(ICreateTypeLib *This,LPOLESTR szDoc);")
cpp_quote("      HRESULT (WINAPI *SetHelpFileName)(ICreateTypeLib *This,LPOLESTR szHelpFileName);")
cpp_quote("      HRESULT (WINAPI *SetHelpContext)(ICreateTypeLib *This,DWORD dwHelpContext);")
cpp_quote("      HRESULT (WINAPI *SetLcid)(ICreateTypeLib *This,LCID lcid);")
cpp_quote("      HRESULT (WINAPI *SetLibFlags)(ICreateTypeLib *This,UINT uLibFlags);")
cpp_quote("      HRESULT (WINAPI *SaveAllChanges)(ICreateTypeLib *This);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ICreateTypeLibVtbl;")
cpp_quote("  struct ICreateTypeLib {")
cpp_quote("    CONST_VTBL struct ICreateTypeLibVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ICreateTypeLib_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ICreateTypeLib_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ICreateTypeLib_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ICreateTypeLib_CreateTypeInfo(This,szName,tkind,ppCTInfo) (This)->lpVtbl->CreateTypeInfo(This,szName,tkind,ppCTInfo)")
cpp_quote("#define ICreateTypeLib_SetName(This,szName) (This)->lpVtbl->SetName(This,szName)")
cpp_quote("#define ICreateTypeLib_SetVersion(This,wMajorVerNum,wMinorVerNum) (This)->lpVtbl->SetVersion(This,wMajorVerNum,wMinorVerNum)")
cpp_quote("#define ICreateTypeLib_SetGuid(This,guid) (This)->lpVtbl->SetGuid(This,guid)")
cpp_quote("#define ICreateTypeLib_SetDocString(This,szDoc) (This)->lpVtbl->SetDocString(This,szDoc)")
cpp_quote("#define ICreateTypeLib_SetHelpFileName(This,szHelpFileName) (This)->lpVtbl->SetHelpFileName(This,szHelpFileName)")
cpp_quote("#define ICreateTypeLib_SetHelpContext(This,dwHelpContext) (This)->lpVtbl->SetHelpContext(This,dwHelpContext)")
cpp_quote("#define ICreateTypeLib_SetLcid(This,lcid) (This)->lpVtbl->SetLcid(This,lcid)")
cpp_quote("#define ICreateTypeLib_SetLibFlags(This,uLibFlags) (This)->lpVtbl->SetLibFlags(This,uLibFlags)")
cpp_quote("#define ICreateTypeLib_SaveAllChanges(This) (This)->lpVtbl->SaveAllChanges(This)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ICreateTypeLib_CreateTypeInfo_Proxy(ICreateTypeLib *This,LPOLESTR szName,TYPEKIND tkind,ICreateTypeInfo **ppCTInfo);")
cpp_quote("  void __RPC_STUB ICreateTypeLib_CreateTypeInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeLib_SetName_Proxy(ICreateTypeLib *This,LPOLESTR szName);")
cpp_quote("  void __RPC_STUB ICreateTypeLib_SetName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeLib_SetVersion_Proxy(ICreateTypeLib *This,WORD wMajorVerNum,WORD wMinorVerNum);")
cpp_quote("  void __RPC_STUB ICreateTypeLib_SetVersion_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeLib_SetGuid_Proxy(ICreateTypeLib *This,REFGUID guid);")
cpp_quote("  void __RPC_STUB ICreateTypeLib_SetGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeLib_SetDocString_Proxy(ICreateTypeLib *This,LPOLESTR szDoc);")
cpp_quote("  void __RPC_STUB ICreateTypeLib_SetDocString_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeLib_SetHelpFileName_Proxy(ICreateTypeLib *This,LPOLESTR szHelpFileName);")
cpp_quote("  void __RPC_STUB ICreateTypeLib_SetHelpFileName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeLib_SetHelpContext_Proxy(ICreateTypeLib *This,DWORD dwHelpContext);")
cpp_quote("  void __RPC_STUB ICreateTypeLib_SetHelpContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeLib_SetLcid_Proxy(ICreateTypeLib *This,LCID lcid);")
cpp_quote("  void __RPC_STUB ICreateTypeLib_SetLcid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeLib_SetLibFlags_Proxy(ICreateTypeLib *This,UINT uLibFlags);")
cpp_quote("  void __RPC_STUB ICreateTypeLib_SetLibFlags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeLib_SaveAllChanges_Proxy(ICreateTypeLib *This);")
cpp_quote("  void __RPC_STUB ICreateTypeLib_SaveAllChanges_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ICreateTypeLib2_INTERFACE_DEFINED__")
cpp_quote("#define __ICreateTypeLib2_INTERFACE_DEFINED__")
cpp_quote("  typedef ICreateTypeLib2 *LPCREATETYPELIB2;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_ICreateTypeLib2;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ICreateTypeLib2 : public ICreateTypeLib {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI DeleteTypeInfo(LPOLESTR szName) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetCustData(REFGUID guid,VARIANT *pVarVal) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetHelpStringContext(ULONG dwHelpStringContext) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetHelpStringDll(LPOLESTR szFileName) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ICreateTypeLib2Vtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ICreateTypeLib2 *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ICreateTypeLib2 *This);")
cpp_quote("      ULONG (WINAPI *Release)(ICreateTypeLib2 *This);")
cpp_quote("      HRESULT (WINAPI *CreateTypeInfo)(ICreateTypeLib2 *This,LPOLESTR szName,TYPEKIND tkind,ICreateTypeInfo **ppCTInfo);")
cpp_quote("      HRESULT (WINAPI *SetName)(ICreateTypeLib2 *This,LPOLESTR szName);")
cpp_quote("      HRESULT (WINAPI *SetVersion)(ICreateTypeLib2 *This,WORD wMajorVerNum,WORD wMinorVerNum);")
cpp_quote("      HRESULT (WINAPI *SetGuid)(ICreateTypeLib2 *This,REFGUID guid);")
cpp_quote("      HRESULT (WINAPI *SetDocString)(ICreateTypeLib2 *This,LPOLESTR szDoc);")
cpp_quote("      HRESULT (WINAPI *SetHelpFileName)(ICreateTypeLib2 *This,LPOLESTR szHelpFileName);")
cpp_quote("      HRESULT (WINAPI *SetHelpContext)(ICreateTypeLib2 *This,DWORD dwHelpContext);")
cpp_quote("      HRESULT (WINAPI *SetLcid)(ICreateTypeLib2 *This,LCID lcid);")
cpp_quote("      HRESULT (WINAPI *SetLibFlags)(ICreateTypeLib2 *This,UINT uLibFlags);")
cpp_quote("      HRESULT (WINAPI *SaveAllChanges)(ICreateTypeLib2 *This);")
cpp_quote("      HRESULT (WINAPI *DeleteTypeInfo)(ICreateTypeLib2 *This,LPOLESTR szName);")
cpp_quote("      HRESULT (WINAPI *SetCustData)(ICreateTypeLib2 *This,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("      HRESULT (WINAPI *SetHelpStringContext)(ICreateTypeLib2 *This,ULONG dwHelpStringContext);")
cpp_quote("      HRESULT (WINAPI *SetHelpStringDll)(ICreateTypeLib2 *This,LPOLESTR szFileName);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ICreateTypeLib2Vtbl;")
cpp_quote("  struct ICreateTypeLib2 {")
cpp_quote("    CONST_VTBL struct ICreateTypeLib2Vtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ICreateTypeLib2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ICreateTypeLib2_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ICreateTypeLib2_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ICreateTypeLib2_CreateTypeInfo(This,szName,tkind,ppCTInfo) (This)->lpVtbl->CreateTypeInfo(This,szName,tkind,ppCTInfo)")
cpp_quote("#define ICreateTypeLib2_SetName(This,szName) (This)->lpVtbl->SetName(This,szName)")
cpp_quote("#define ICreateTypeLib2_SetVersion(This,wMajorVerNum,wMinorVerNum) (This)->lpVtbl->SetVersion(This,wMajorVerNum,wMinorVerNum)")
cpp_quote("#define ICreateTypeLib2_SetGuid(This,guid) (This)->lpVtbl->SetGuid(This,guid)")
cpp_quote("#define ICreateTypeLib2_SetDocString(This,szDoc) (This)->lpVtbl->SetDocString(This,szDoc)")
cpp_quote("#define ICreateTypeLib2_SetHelpFileName(This,szHelpFileName) (This)->lpVtbl->SetHelpFileName(This,szHelpFileName)")
cpp_quote("#define ICreateTypeLib2_SetHelpContext(This,dwHelpContext) (This)->lpVtbl->SetHelpContext(This,dwHelpContext)")
cpp_quote("#define ICreateTypeLib2_SetLcid(This,lcid) (This)->lpVtbl->SetLcid(This,lcid)")
cpp_quote("#define ICreateTypeLib2_SetLibFlags(This,uLibFlags) (This)->lpVtbl->SetLibFlags(This,uLibFlags)")
cpp_quote("#define ICreateTypeLib2_SaveAllChanges(This) (This)->lpVtbl->SaveAllChanges(This)")
cpp_quote("#define ICreateTypeLib2_DeleteTypeInfo(This,szName) (This)->lpVtbl->DeleteTypeInfo(This,szName)")
cpp_quote("#define ICreateTypeLib2_SetCustData(This,guid,pVarVal) (This)->lpVtbl->SetCustData(This,guid,pVarVal)")
cpp_quote("#define ICreateTypeLib2_SetHelpStringContext(This,dwHelpStringContext) (This)->lpVtbl->SetHelpStringContext(This,dwHelpStringContext)")
cpp_quote("#define ICreateTypeLib2_SetHelpStringDll(This,szFileName) (This)->lpVtbl->SetHelpStringDll(This,szFileName)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ICreateTypeLib2_DeleteTypeInfo_Proxy(ICreateTypeLib2 *This,LPOLESTR szName);")
cpp_quote("  void __RPC_STUB ICreateTypeLib2_DeleteTypeInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeLib2_SetCustData_Proxy(ICreateTypeLib2 *This,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("  void __RPC_STUB ICreateTypeLib2_SetCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeLib2_SetHelpStringContext_Proxy(ICreateTypeLib2 *This,ULONG dwHelpStringContext);")
cpp_quote("  void __RPC_STUB ICreateTypeLib2_SetHelpStringContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateTypeLib2_SetHelpStringDll_Proxy(ICreateTypeLib2 *This,LPOLESTR szFileName);")
cpp_quote("  void __RPC_STUB ICreateTypeLib2_SetHelpStringDll_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")

[
    object,
    uuid(00020400-0000-0000-c000-000000000046),
    pointer_default(unique)
]
interface IDispatch : IUnknown
{
    typedef [unique] IDispatch *LPDISPATCH;

    HRESULT GetTypeInfoCount([out] UINT *pctinfo);

    HRESULT GetTypeInfo(
            [in] UINT iTInfo,
            [in] LCID lcid,
            [out] ITypeInfo **ppTInfo);

    HRESULT GetIDsOfNames(
            [in] REFIID riid,
            [in, size_is(cNames)] LPOLESTR *rgszNames,
            [in, range(0, 16384)] UINT cNames,
            [in] LCID lcid,
            [out, size_is(cNames)] DISPID *rgDispId);

    [local] HRESULT Invoke(
            [in] DISPID dispIdMember,
            [in] REFIID riid,
            [in] LCID lcid,
            [in] WORD wFlags,
            [in, out] DISPPARAMS *pDispParams,
            [out] VARIANT *pVarResult,
            [out] EXCEPINFO *pExcepInfo,
            [out] UINT *puArgErr);

    [call_as(Invoke)] HRESULT RemoteInvoke(
            [in] DISPID dispIdMember,
            [in] REFIID riid,
            [in] LCID lcid,
            [in] DWORD dwFlags,
            [in] DISPPARAMS *pDispParams,
            [out] VARIANT *pVarResult,
            [out] EXCEPINFO *pExcepInfo,
            [out] UINT *pArgErr,
            [in] UINT cVarRef,
            [in, size_is(cVarRef)] UINT *rgVarRefIdx,
            [in, out, size_is(cVarRef)] VARIANTARG *rgVarRef);

    const DISPID DISPID_UNKNOWN = -1;
    const DISPID DISPID_VALUE = 0;
    const DISPID DISPID_PROPERTYPUT = -3;
    const DISPID DISPID_NEWENUM = -4;
    const DISPID DISPID_EVALUATE = -5;
    const DISPID DISPID_CONSTRUCTOR = -6;
    const DISPID DISPID_DESTRUCTOR = -7;
    const DISPID DISPID_COLLECT = -8;
}

cpp_quote("#ifndef __IEnumVARIANT_INTERFACE_DEFINED__")
cpp_quote("#define __IEnumVARIANT_INTERFACE_DEFINED__")
cpp_quote("  typedef IEnumVARIANT *LPENUMVARIANT;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IEnumVARIANT;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IEnumVARIANT : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Next(ULONG celt,VARIANT *rgVar,ULONG *pCeltFetched) = 0;")
cpp_quote("    virtual HRESULT WINAPI Skip(ULONG celt) = 0;")
cpp_quote("    virtual HRESULT WINAPI Reset(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI Clone(IEnumVARIANT **ppEnum) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IEnumVARIANTVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IEnumVARIANT *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IEnumVARIANT *This);")
cpp_quote("      ULONG (WINAPI *Release)(IEnumVARIANT *This);")
cpp_quote("      HRESULT (WINAPI *Next)(IEnumVARIANT *This,ULONG celt,VARIANT *rgVar,ULONG *pCeltFetched);")
cpp_quote("      HRESULT (WINAPI *Skip)(IEnumVARIANT *This,ULONG celt);")
cpp_quote("      HRESULT (WINAPI *Reset)(IEnumVARIANT *This);")
cpp_quote("      HRESULT (WINAPI *Clone)(IEnumVARIANT *This,IEnumVARIANT **ppEnum);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IEnumVARIANTVtbl;")
cpp_quote("  struct IEnumVARIANT {")
cpp_quote("    CONST_VTBL struct IEnumVARIANTVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IEnumVARIANT_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IEnumVARIANT_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IEnumVARIANT_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IEnumVARIANT_Next(This,celt,rgVar,pCeltFetched) (This)->lpVtbl->Next(This,celt,rgVar,pCeltFetched)")
cpp_quote("#define IEnumVARIANT_Skip(This,celt) (This)->lpVtbl->Skip(This,celt)")
cpp_quote("#define IEnumVARIANT_Reset(This) (This)->lpVtbl->Reset(This)")
cpp_quote("#define IEnumVARIANT_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IEnumVARIANT_RemoteNext_Proxy(IEnumVARIANT *This,ULONG celt,VARIANT *rgVar,ULONG *pCeltFetched);")
cpp_quote("  void __RPC_STUB IEnumVARIANT_RemoteNext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumVARIANT_Skip_Proxy(IEnumVARIANT *This,ULONG celt);")
cpp_quote("  void __RPC_STUB IEnumVARIANT_Skip_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumVARIANT_Reset_Proxy(IEnumVARIANT *This);")
cpp_quote("  void __RPC_STUB IEnumVARIANT_Reset_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IEnumVARIANT_Clone_Proxy(IEnumVARIANT *This,IEnumVARIANT **ppEnum);")
cpp_quote("  void __RPC_STUB IEnumVARIANT_Clone_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")

[
    object,
    uuid(00020403-0000-0000-c000-000000000046),
    pointer_default(unique)
]
interface ITypeComp : IUnknown
{
    typedef [unique] ITypeComp *LPTYPECOMP;

    typedef [v1_enum] 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;

    [local]
    HRESULT Bind(
            [in] LPOLESTR szName,
            [in] ULONG lHashVal,
            [in] WORD wFlags,
            [out] ITypeInfo **ppTInfo,
            [out] DESCKIND *pDescKind,
            [out] BINDPTR *pBindPtr);
    [call_as(Bind)]
    HRESULT RemoteBind(
            [in] LPOLESTR szName,
            [in] ULONG lHashVal,
            [in] WORD wFlags,
            [out] ITypeInfo **ppTInfo,
            [out] DESCKIND *pDescKind,
            [out] LPFUNCDESC *ppFuncDesc,
            [out] LPVARDESC *ppVarDesc,
            [out] ITypeComp **ppTypeComp,
            [out] CLEANLOCALSTORAGE *pDummy);

    [local]
    HRESULT BindType(
            [in] LPOLESTR szName,
            [in] ULONG lHashVal,
            [out] ITypeInfo **ppTInfo,
            [out] ITypeComp **ppTComp);
    [call_as(BindType)]
    HRESULT RemoteBindType(
            [in] LPOLESTR szName,
            [in] ULONG lHashVal,
            [out] ITypeInfo **ppTInfo);
}

[
    object,
    uuid(00020401-0000-0000-c000-000000000046),
    pointer_default(unique)
]
interface ITypeInfo : IUnknown
{
    typedef [unique] ITypeInfo *LPTYPEINFO;

    [local]
    HRESULT GetTypeAttr(
            [out] TYPEATTR **ppTypeAttr);
    [call_as(GetTypeAttr)]
    HRESULT RemoteGetTypeAttr(
            [out] LPTYPEATTR *ppTypeAttr,
            [out] CLEANLOCALSTORAGE *pDummy);

    HRESULT GetTypeComp([out] ITypeComp **ppTComp);

    [local]
    HRESULT GetFuncDesc(
            [in] UINT index,
            [out] FUNCDESC **ppFuncDesc);
    [call_as(GetFuncDesc)]
    HRESULT RemoteGetFuncDesc(
            [in] UINT index,
            [out] LPFUNCDESC *ppFuncDesc,
            [out] CLEANLOCALSTORAGE *pDummy);

    [local]
    HRESULT GetVarDesc(
            [in] UINT index,
            [out] VARDESC **ppVarDesc);
    [call_as(GetVarDesc)]
    HRESULT RemoteGetVarDesc(
            [in] UINT index,
            [out] LPVARDESC *ppVarDesc,
            [out] CLEANLOCALSTORAGE *pDummy);

    [local]
    HRESULT GetNames(
            [in] MEMBERID memid,
            [out,size_is(cMaxNames),length_is(*pcNames)] BSTR *rgBstrNames,
            [in] UINT cMaxNames,
            [out] UINT *pcNames);
    [call_as(GetNames)]
    HRESULT RemoteGetNames(
            [in] MEMBERID memid,
            [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgBstrNames,
            [in] UINT cMaxNames,
            [out] UINT *pcNames);

    HRESULT GetRefTypeOfImplType(
            [in] UINT index,
            [out] HREFTYPE *pRefType);

    HRESULT GetImplTypeFlags(
            [in] UINT index,
            [out] INT *pImplTypeFlags);

    [local]
    HRESULT GetIDsOfNames(
            [in, size_is(cNames)] LPOLESTR *rgszNames,
            [in] UINT cNames,
            [out, size_is(cNames)] MEMBERID *pMemId);
    [call_as(GetIDsOfNames)]
    HRESULT LocalGetIDsOfNames();

    [local]
    HRESULT Invoke(
            [in] PVOID pvInstance,
            [in] MEMBERID memid,
            [in] WORD wFlags,
            [in, out] DISPPARAMS *pDispParams,
            [out] VARIANT *pVarResult,
            [out] EXCEPINFO *pExcepInfo,
            [out] UINT *puArgErr);
    [call_as(Invoke)]
    HRESULT LocalInvoke ();

    [local]
    HRESULT GetDocumentation(
            [in] MEMBERID memid,
            [out] BSTR *pBstrName,
            [out] BSTR *pBstrDocString,
            [out] DWORD *pdwHelpContext,
            [out] BSTR *pBstrHelpFile);
    [call_as(GetDocumentation)]
    HRESULT RemoteGetDocumentation(
            [in] MEMBERID memid,
            [in] DWORD refPtrFlags,
            [out] BSTR *pBstrName,
            [out] BSTR *pBstrDocString,
            [out] DWORD *pdwHelpContext,
            [out] BSTR *pBstrHelpFile);

    [local]
    HRESULT GetDllEntry(
            [in] MEMBERID memid,
            [in] INVOKEKIND invKind,
            [out] BSTR *pBstrDllName,
            [out] BSTR *pBstrName,
            [out] WORD *pwOrdinal);
    [call_as(GetDllEntry)]
    HRESULT RemoteGetDllEntry(
            [in] MEMBERID memid,
            [in] INVOKEKIND invKind,
            [in] DWORD refPtrFlags,
            [out] BSTR *pBstrDllName,
            [out] BSTR *pBstrName,
            [out] WORD *pwOrdinal);

    HRESULT GetRefTypeInfo(
            [in] HREFTYPE hRefType,
            [out] ITypeInfo **ppTInfo);

    [local]
    HRESULT AddressOfMember(
            [in] MEMBERID memid,
            [in] INVOKEKIND invKind,
            [out] PVOID *ppv);
    [call_as(AddressOfMember)]
    HRESULT LocalAddressOfMember();

    [local]
    HRESULT CreateInstance(
            [in] IUnknown *pUnkOuter,
            [in] REFIID riid,
            [out, iid_is(riid)] PVOID *ppvObj);
    [call_as(CreateInstance)]
    HRESULT RemoteCreateInstance(
            [in] REFIID riid,
            [out, iid_is(riid)] IUnknown **ppvObj);

    HRESULT GetMops(
            [in] MEMBERID memid,
            [out] BSTR *pBstrMops);

    [local]
    HRESULT GetContainingTypeLib(
            [out] ITypeLib **ppTLib,
            [out] UINT *pIndex);
    [call_as(GetContainingTypeLib)]
    HRESULT RemoteGetContainingTypeLib(
            [out] ITypeLib **ppTLib,
            [out] UINT *pIndex);

    [local]
    void ReleaseTypeAttr([in] TYPEATTR *pTypeAttr);
    [call_as(ReleaseTypeAttr)]
    HRESULT LocalReleaseTypeAttr();

    [local]
    void ReleaseFuncDesc([in] FUNCDESC *pFuncDesc);
    [call_as(ReleaseFuncDesc)]
    HRESULT LocalReleaseFuncDesc();

    [local]
    void ReleaseVarDesc([in] VARDESC *pVarDesc);
    [call_as(ReleaseVarDesc)]
    HRESULT LocalReleaseVarDesc();
}

cpp_quote("#ifndef __ITypeInfo2_INTERFACE_DEFINED__")
cpp_quote("#define __ITypeInfo2_INTERFACE_DEFINED__")
cpp_quote("  typedef ITypeInfo2 *LPTYPEINFO2;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_ITypeInfo2;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ITypeInfo2 : public ITypeInfo {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetTypeKind(TYPEKIND *pTypeKind) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetTypeFlags(ULONG *pTypeFlags) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetFuncIndexOfMemId(MEMBERID memid,INVOKEKIND invKind,UINT *pFuncIndex) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetVarIndexOfMemId(MEMBERID memid,UINT *pVarIndex) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetCustData(REFGUID guid,VARIANT *pVarVal) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetFuncCustData(UINT index,REFGUID guid,VARIANT *pVarVal) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetParamCustData(UINT indexFunc,UINT indexParam,REFGUID guid,VARIANT *pVarVal) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetVarCustData(UINT index,REFGUID guid,VARIANT *pVarVal) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetImplTypeCustData(UINT index,REFGUID guid,VARIANT *pVarVal) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetDocumentation2(MEMBERID memid,LCID lcid,BSTR *pbstrHelpString,DWORD *pdwHelpStringContext,BSTR *pbstrHelpStringDll) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetAllCustData(CUSTDATA *pCustData) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetAllFuncCustData(UINT index,CUSTDATA *pCustData) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetAllParamCustData(UINT indexFunc,UINT indexParam,CUSTDATA *pCustData) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetAllVarCustData(UINT index,CUSTDATA *pCustData) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetAllImplTypeCustData(UINT index,CUSTDATA *pCustData) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ITypeInfo2Vtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ITypeInfo2 *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ITypeInfo2 *This);")
cpp_quote("      ULONG (WINAPI *Release)(ITypeInfo2 *This);")
cpp_quote("      HRESULT (WINAPI *GetTypeAttr)(ITypeInfo2 *This,TYPEATTR **ppTypeAttr);")
cpp_quote("      HRESULT (WINAPI *GetTypeComp)(ITypeInfo2 *This,ITypeComp **ppTComp);")
cpp_quote("      HRESULT (WINAPI *GetFuncDesc)(ITypeInfo2 *This,UINT index,FUNCDESC **ppFuncDesc);")
cpp_quote("      HRESULT (WINAPI *GetVarDesc)(ITypeInfo2 *This,UINT index,VARDESC **ppVarDesc);")
cpp_quote("      HRESULT (WINAPI *GetNames)(ITypeInfo2 *This,MEMBERID memid,BSTR *rgBstrNames,UINT cMaxNames,UINT *pcNames);")
cpp_quote("      HRESULT (WINAPI *GetRefTypeOfImplType)(ITypeInfo2 *This,UINT index,HREFTYPE *pRefType);")
cpp_quote("      HRESULT (WINAPI *GetImplTypeFlags)(ITypeInfo2 *This,UINT index,INT *pImplTypeFlags);")
cpp_quote("      HRESULT (WINAPI *GetIDsOfNames)(ITypeInfo2 *This,LPOLESTR *rgszNames,UINT cNames,MEMBERID *pMemId);")
cpp_quote("      HRESULT (WINAPI *Invoke)(ITypeInfo2 *This,PVOID pvInstance,MEMBERID memid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);")
cpp_quote("      HRESULT (WINAPI *GetDocumentation)(ITypeInfo2 *This,MEMBERID memid,BSTR *pBstrName,BSTR *pBstrDocString,DWORD *pdwHelpContext,BSTR *pBstrHelpFile);")
cpp_quote("      HRESULT (WINAPI *GetDllEntry)(ITypeInfo2 *This,MEMBERID memid,INVOKEKIND invKind,BSTR *pBstrDllName,BSTR *pBstrName,WORD *pwOrdinal);")
cpp_quote("      HRESULT (WINAPI *GetRefTypeInfo)(ITypeInfo2 *This,HREFTYPE hRefType,ITypeInfo **ppTInfo);")
cpp_quote("      HRESULT (WINAPI *AddressOfMember)(ITypeInfo2 *This,MEMBERID memid,INVOKEKIND invKind,PVOID *ppv);")
cpp_quote("      HRESULT (WINAPI *CreateInstance)(ITypeInfo2 *This,IUnknown *pUnkOuter,REFIID riid,PVOID *ppvObj);")
cpp_quote("      HRESULT (WINAPI *GetMops)(ITypeInfo2 *This,MEMBERID memid,BSTR *pBstrMops);")
cpp_quote("      HRESULT (WINAPI *GetContainingTypeLib)(ITypeInfo2 *This,ITypeLib **ppTLib,UINT *pIndex);")
cpp_quote("      void (WINAPI *ReleaseTypeAttr)(ITypeInfo2 *This,TYPEATTR *pTypeAttr);")
cpp_quote("      void (WINAPI *ReleaseFuncDesc)(ITypeInfo2 *This,FUNCDESC *pFuncDesc);")
cpp_quote("      void (WINAPI *ReleaseVarDesc)(ITypeInfo2 *This,VARDESC *pVarDesc);")
cpp_quote("      HRESULT (WINAPI *GetTypeKind)(ITypeInfo2 *This,TYPEKIND *pTypeKind);")
cpp_quote("      HRESULT (WINAPI *GetTypeFlags)(ITypeInfo2 *This,ULONG *pTypeFlags);")
cpp_quote("      HRESULT (WINAPI *GetFuncIndexOfMemId)(ITypeInfo2 *This,MEMBERID memid,INVOKEKIND invKind,UINT *pFuncIndex);")
cpp_quote("      HRESULT (WINAPI *GetVarIndexOfMemId)(ITypeInfo2 *This,MEMBERID memid,UINT *pVarIndex);")
cpp_quote("      HRESULT (WINAPI *GetCustData)(ITypeInfo2 *This,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("      HRESULT (WINAPI *GetFuncCustData)(ITypeInfo2 *This,UINT index,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("      HRESULT (WINAPI *GetParamCustData)(ITypeInfo2 *This,UINT indexFunc,UINT indexParam,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("      HRESULT (WINAPI *GetVarCustData)(ITypeInfo2 *This,UINT index,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("      HRESULT (WINAPI *GetImplTypeCustData)(ITypeInfo2 *This,UINT index,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("      HRESULT (WINAPI *GetDocumentation2)(ITypeInfo2 *This,MEMBERID memid,LCID lcid,BSTR *pbstrHelpString,DWORD *pdwHelpStringContext,BSTR *pbstrHelpStringDll);")
cpp_quote("      HRESULT (WINAPI *GetAllCustData)(ITypeInfo2 *This,CUSTDATA *pCustData);")
cpp_quote("      HRESULT (WINAPI *GetAllFuncCustData)(ITypeInfo2 *This,UINT index,CUSTDATA *pCustData);")
cpp_quote("      HRESULT (WINAPI *GetAllParamCustData)(ITypeInfo2 *This,UINT indexFunc,UINT indexParam,CUSTDATA *pCustData);")
cpp_quote("      HRESULT (WINAPI *GetAllVarCustData)(ITypeInfo2 *This,UINT index,CUSTDATA *pCustData);")
cpp_quote("      HRESULT (WINAPI *GetAllImplTypeCustData)(ITypeInfo2 *This,UINT index,CUSTDATA *pCustData);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ITypeInfo2Vtbl;")
cpp_quote("  struct ITypeInfo2 {")
cpp_quote("    CONST_VTBL struct ITypeInfo2Vtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ITypeInfo2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ITypeInfo2_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ITypeInfo2_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ITypeInfo2_GetTypeAttr(This,ppTypeAttr) (This)->lpVtbl->GetTypeAttr(This,ppTypeAttr)")
cpp_quote("#define ITypeInfo2_GetTypeComp(This,ppTComp) (This)->lpVtbl->GetTypeComp(This,ppTComp)")
cpp_quote("#define ITypeInfo2_GetFuncDesc(This,index,ppFuncDesc) (This)->lpVtbl->GetFuncDesc(This,index,ppFuncDesc)")
cpp_quote("#define ITypeInfo2_GetVarDesc(This,index,ppVarDesc) (This)->lpVtbl->GetVarDesc(This,index,ppVarDesc)")
cpp_quote("#define ITypeInfo2_GetNames(This,memid,rgBstrNames,cMaxNames,pcNames) (This)->lpVtbl->GetNames(This,memid,rgBstrNames,cMaxNames,pcNames)")
cpp_quote("#define ITypeInfo2_GetRefTypeOfImplType(This,index,pRefType) (This)->lpVtbl->GetRefTypeOfImplType(This,index,pRefType)")
cpp_quote("#define ITypeInfo2_GetImplTypeFlags(This,index,pImplTypeFlags) (This)->lpVtbl->GetImplTypeFlags(This,index,pImplTypeFlags)")
cpp_quote("#define ITypeInfo2_GetIDsOfNames(This,rgszNames,cNames,pMemId) (This)->lpVtbl->GetIDsOfNames(This,rgszNames,cNames,pMemId)")
cpp_quote("#define ITypeInfo2_Invoke(This,pvInstance,memid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,pvInstance,memid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)")
cpp_quote("#define ITypeInfo2_GetDocumentation(This,memid,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile) (This)->lpVtbl->GetDocumentation(This,memid,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile)")
cpp_quote("#define ITypeInfo2_GetDllEntry(This,memid,invKind,pBstrDllName,pBstrName,pwOrdinal) (This)->lpVtbl->GetDllEntry(This,memid,invKind,pBstrDllName,pBstrName,pwOrdinal)")
cpp_quote("#define ITypeInfo2_GetRefTypeInfo(This,hRefType,ppTInfo) (This)->lpVtbl->GetRefTypeInfo(This,hRefType,ppTInfo)")
cpp_quote("#define ITypeInfo2_AddressOfMember(This,memid,invKind,ppv) (This)->lpVtbl->AddressOfMember(This,memid,invKind,ppv)")
cpp_quote("#define ITypeInfo2_CreateInstance(This,pUnkOuter,riid,ppvObj) (This)->lpVtbl->CreateInstance(This,pUnkOuter,riid,ppvObj)")
cpp_quote("#define ITypeInfo2_GetMops(This,memid,pBstrMops) (This)->lpVtbl->GetMops(This,memid,pBstrMops)")
cpp_quote("#define ITypeInfo2_GetContainingTypeLib(This,ppTLib,pIndex) (This)->lpVtbl->GetContainingTypeLib(This,ppTLib,pIndex)")
cpp_quote("#define ITypeInfo2_ReleaseTypeAttr(This,pTypeAttr) (This)->lpVtbl->ReleaseTypeAttr(This,pTypeAttr)")
cpp_quote("#define ITypeInfo2_ReleaseFuncDesc(This,pFuncDesc) (This)->lpVtbl->ReleaseFuncDesc(This,pFuncDesc)")
cpp_quote("#define ITypeInfo2_ReleaseVarDesc(This,pVarDesc) (This)->lpVtbl->ReleaseVarDesc(This,pVarDesc)")
cpp_quote("#define ITypeInfo2_GetTypeKind(This,pTypeKind) (This)->lpVtbl->GetTypeKind(This,pTypeKind)")
cpp_quote("#define ITypeInfo2_GetTypeFlags(This,pTypeFlags) (This)->lpVtbl->GetTypeFlags(This,pTypeFlags)")
cpp_quote("#define ITypeInfo2_GetFuncIndexOfMemId(This,memid,invKind,pFuncIndex) (This)->lpVtbl->GetFuncIndexOfMemId(This,memid,invKind,pFuncIndex)")
cpp_quote("#define ITypeInfo2_GetVarIndexOfMemId(This,memid,pVarIndex) (This)->lpVtbl->GetVarIndexOfMemId(This,memid,pVarIndex)")
cpp_quote("#define ITypeInfo2_GetCustData(This,guid,pVarVal) (This)->lpVtbl->GetCustData(This,guid,pVarVal)")
cpp_quote("#define ITypeInfo2_GetFuncCustData(This,index,guid,pVarVal) (This)->lpVtbl->GetFuncCustData(This,index,guid,pVarVal)")
cpp_quote("#define ITypeInfo2_GetParamCustData(This,indexFunc,indexParam,guid,pVarVal) (This)->lpVtbl->GetParamCustData(This,indexFunc,indexParam,guid,pVarVal)")
cpp_quote("#define ITypeInfo2_GetVarCustData(This,index,guid,pVarVal) (This)->lpVtbl->GetVarCustData(This,index,guid,pVarVal)")
cpp_quote("#define ITypeInfo2_GetImplTypeCustData(This,index,guid,pVarVal) (This)->lpVtbl->GetImplTypeCustData(This,index,guid,pVarVal)")
cpp_quote("#define ITypeInfo2_GetDocumentation2(This,memid,lcid,pbstrHelpString,pdwHelpStringContext,pbstrHelpStringDll) (This)->lpVtbl->GetDocumentation2(This,memid,lcid,pbstrHelpString,pdwHelpStringContext,pbstrHelpStringDll)")
cpp_quote("#define ITypeInfo2_GetAllCustData(This,pCustData) (This)->lpVtbl->GetAllCustData(This,pCustData)")
cpp_quote("#define ITypeInfo2_GetAllFuncCustData(This,index,pCustData) (This)->lpVtbl->GetAllFuncCustData(This,index,pCustData)")
cpp_quote("#define ITypeInfo2_GetAllParamCustData(This,indexFunc,indexParam,pCustData) (This)->lpVtbl->GetAllParamCustData(This,indexFunc,indexParam,pCustData)")
cpp_quote("#define ITypeInfo2_GetAllVarCustData(This,index,pCustData) (This)->lpVtbl->GetAllVarCustData(This,index,pCustData)")
cpp_quote("#define ITypeInfo2_GetAllImplTypeCustData(This,index,pCustData) (This)->lpVtbl->GetAllImplTypeCustData(This,index,pCustData)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ITypeInfo2_GetTypeKind_Proxy(ITypeInfo2 *This,TYPEKIND *pTypeKind);")
cpp_quote("  void __RPC_STUB ITypeInfo2_GetTypeKind_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeInfo2_GetTypeFlags_Proxy(ITypeInfo2 *This,ULONG *pTypeFlags);")
cpp_quote("  void __RPC_STUB ITypeInfo2_GetTypeFlags_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeInfo2_GetFuncIndexOfMemId_Proxy(ITypeInfo2 *This,MEMBERID memid,INVOKEKIND invKind,UINT *pFuncIndex);")
cpp_quote("  void __RPC_STUB ITypeInfo2_GetFuncIndexOfMemId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeInfo2_GetVarIndexOfMemId_Proxy(ITypeInfo2 *This,MEMBERID memid,UINT *pVarIndex);")
cpp_quote("  void __RPC_STUB ITypeInfo2_GetVarIndexOfMemId_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeInfo2_GetCustData_Proxy(ITypeInfo2 *This,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("  void __RPC_STUB ITypeInfo2_GetCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeInfo2_GetFuncCustData_Proxy(ITypeInfo2 *This,UINT index,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("  void __RPC_STUB ITypeInfo2_GetFuncCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeInfo2_GetParamCustData_Proxy(ITypeInfo2 *This,UINT indexFunc,UINT indexParam,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("  void __RPC_STUB ITypeInfo2_GetParamCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeInfo2_GetVarCustData_Proxy(ITypeInfo2 *This,UINT index,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("  void __RPC_STUB ITypeInfo2_GetVarCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeInfo2_GetImplTypeCustData_Proxy(ITypeInfo2 *This,UINT index,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("  void __RPC_STUB ITypeInfo2_GetImplTypeCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeInfo2_RemoteGetDocumentation2_Proxy(ITypeInfo2 *This,MEMBERID memid,LCID lcid,DWORD refPtrFlags,BSTR *pbstrHelpString,DWORD *pdwHelpStringContext,BSTR *pbstrHelpStringDll);")
cpp_quote("  void __RPC_STUB ITypeInfo2_RemoteGetDocumentation2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeInfo2_GetAllCustData_Proxy(ITypeInfo2 *This,CUSTDATA *pCustData);")
cpp_quote("  void __RPC_STUB ITypeInfo2_GetAllCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeInfo2_GetAllFuncCustData_Proxy(ITypeInfo2 *This,UINT index,CUSTDATA *pCustData);")
cpp_quote("  void __RPC_STUB ITypeInfo2_GetAllFuncCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeInfo2_GetAllParamCustData_Proxy(ITypeInfo2 *This,UINT indexFunc,UINT indexParam,CUSTDATA *pCustData);")
cpp_quote("  void __RPC_STUB ITypeInfo2_GetAllParamCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeInfo2_GetAllVarCustData_Proxy(ITypeInfo2 *This,UINT index,CUSTDATA *pCustData);")
cpp_quote("  void __RPC_STUB ITypeInfo2_GetAllVarCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeInfo2_GetAllImplTypeCustData_Proxy(ITypeInfo2 *This,UINT index,CUSTDATA *pCustData);")
cpp_quote("  void __RPC_STUB ITypeInfo2_GetAllImplTypeCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")

[
    object,
    uuid(00020402-0000-0000-c000-000000000046),
    pointer_default(unique)
]
interface ITypeLib : IUnknown
{
    typedef [unique] ITypeLib *LPTYPELIB;

    typedef [v1_enum] enum tagSYSKIND {
        SYS_WIN16 = 0,
        SYS_WIN32,
        SYS_MAC,
        SYS_WIN64
    } SYSKIND;

    typedef [v1_enum] enum tagLIBFLAGS {
        LIBFLAG_FRESTRICTED   = 0x01,
        LIBFLAG_FCONTROL      = 0x02,
        LIBFLAG_FHIDDEN       = 0x04,
        LIBFLAG_FHASDISKIMAGE = 0x08
    } LIBFLAGS;

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

    [local]
    UINT GetTypeInfoCount();
    [call_as(GetTypeInfoCount)]
    HRESULT RemoteGetTypeInfoCount([out] UINT *pcTInfo);

    HRESULT GetTypeInfo(
        [in] UINT index,
        [out] ITypeInfo **ppTInfo);

    HRESULT GetTypeInfoType(
            [in] UINT index,
            [out] TYPEKIND *pTKind);

    HRESULT GetTypeInfoOfGuid(
            [in] REFGUID guid,
            [out] ITypeInfo **ppTinfo);

    [local]
    HRESULT GetLibAttr(
            [out] TLIBATTR **ppTLibAttr);
    [call_as(GetLibAttr)]
    HRESULT RemoteGetLibAttr(
            [out] LPTLIBATTR *ppTLibAttr,
            [out] CLEANLOCALSTORAGE *pDummy);

    HRESULT GetTypeComp(
            [out] ITypeComp **ppTComp);

    [local]
    HRESULT GetDocumentation(
            [in] INT index,
            [out] BSTR *pBstrName,
            [out] BSTR *pBstrDocString,
            [out] DWORD *pdwHelpContext,
            [out] BSTR *pBstrHelpFile);
    [call_as(GetDocumentation)]
    HRESULT RemoteGetDocumentation(
            [in] INT index,
            [in] DWORD refPtrFlags,
            [out] BSTR *pBstrName,
            [out] BSTR *pBstrDocString,
            [out] DWORD *pdwHelpContext,
            [out] BSTR *pBstrHelpFile);

    [local]
    HRESULT IsName(
            [in, out] LPOLESTR szNameBuf,
            [in] ULONG lHashVal,
            [out] BOOL *pfName);
    [call_as(IsName)]
    HRESULT RemoteIsName(
            [in] LPOLESTR szNameBuf,
            [in] ULONG lHashVal,
            [out] BOOL *pfName,
            [out] BSTR *pBstrLibName);

    [local]
    HRESULT FindName(
            [in, out] LPOLESTR szNameBuf,
            [in] ULONG lHashVal,
            [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo,
            [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId,
            [in, out] USHORT *pcFound);
    [call_as(FindName)]
    HRESULT RemoteFindName(
            [in] LPOLESTR szNameBuf,
            [in] ULONG lHashVal,
            [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo,
            [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId,
            [in, out] USHORT *pcFound,
            [out] BSTR *pBstrLibName);

    [local]
    void ReleaseTLibAttr([in] TLIBATTR *pTLibAttr);
    [call_as(ReleaseTLibAttr)]
    HRESULT LocalReleaseTLibAttr();
}

cpp_quote("#ifndef __ITypeLib2_INTERFACE_DEFINED__")
cpp_quote("#define __ITypeLib2_INTERFACE_DEFINED__")
cpp_quote("  typedef ITypeLib2 *LPTYPELIB2;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_ITypeLib2;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ITypeLib2 : public ITypeLib {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetCustData(REFGUID guid,VARIANT *pVarVal) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetLibStatistics(ULONG *pcUniqueNames,ULONG *pcchUniqueNames) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetDocumentation2(INT index,LCID lcid,BSTR *pbstrHelpString,DWORD *pdwHelpStringContext,BSTR *pbstrHelpStringDll) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetAllCustData(CUSTDATA *pCustData) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ITypeLib2Vtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ITypeLib2 *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ITypeLib2 *This);")
cpp_quote("      ULONG (WINAPI *Release)(ITypeLib2 *This);")
cpp_quote("      UINT (WINAPI *GetTypeInfoCount)(ITypeLib2 *This);")
cpp_quote("      HRESULT (WINAPI *GetTypeInfo)(ITypeLib2 *This,UINT index,ITypeInfo **ppTInfo);")
cpp_quote("      HRESULT (WINAPI *GetTypeInfoType)(ITypeLib2 *This,UINT index,TYPEKIND *pTKind);")
cpp_quote("      HRESULT (WINAPI *GetTypeInfoOfGuid)(ITypeLib2 *This,REFGUID guid,ITypeInfo **ppTinfo);")
cpp_quote("      HRESULT (WINAPI *GetLibAttr)(ITypeLib2 *This,TLIBATTR **ppTLibAttr);")
cpp_quote("      HRESULT (WINAPI *GetTypeComp)(ITypeLib2 *This,ITypeComp **ppTComp);")
cpp_quote("      HRESULT (WINAPI *GetDocumentation)(ITypeLib2 *This,INT index,BSTR *pBstrName,BSTR *pBstrDocString,DWORD *pdwHelpContext,BSTR *pBstrHelpFile);")
cpp_quote("      HRESULT (WINAPI *IsName)(ITypeLib2 *This,LPOLESTR szNameBuf,ULONG lHashVal,WINBOOL *pfName);")
cpp_quote("      HRESULT (WINAPI *FindName)(ITypeLib2 *This,LPOLESTR szNameBuf,ULONG lHashVal,ITypeInfo **ppTInfo,MEMBERID *rgMemId,USHORT *pcFound);")
cpp_quote("      void (WINAPI *ReleaseTLibAttr)(ITypeLib2 *This,TLIBATTR *pTLibAttr);")
cpp_quote("      HRESULT (WINAPI *GetCustData)(ITypeLib2 *This,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("      HRESULT (WINAPI *GetLibStatistics)(ITypeLib2 *This,ULONG *pcUniqueNames,ULONG *pcchUniqueNames);")
cpp_quote("      HRESULT (WINAPI *GetDocumentation2)(ITypeLib2 *This,INT index,LCID lcid,BSTR *pbstrHelpString,DWORD *pdwHelpStringContext,BSTR *pbstrHelpStringDll);")
cpp_quote("      HRESULT (WINAPI *GetAllCustData)(ITypeLib2 *This,CUSTDATA *pCustData);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ITypeLib2Vtbl;")
cpp_quote("  struct ITypeLib2 {")
cpp_quote("    CONST_VTBL struct ITypeLib2Vtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ITypeLib2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ITypeLib2_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ITypeLib2_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ITypeLib2_GetTypeInfoCount(This) (This)->lpVtbl->GetTypeInfoCount(This)")
cpp_quote("#define ITypeLib2_GetTypeInfo(This,index,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,index,ppTInfo)")
cpp_quote("#define ITypeLib2_GetTypeInfoType(This,index,pTKind) (This)->lpVtbl->GetTypeInfoType(This,index,pTKind)")
cpp_quote("#define ITypeLib2_GetTypeInfoOfGuid(This,guid,ppTinfo) (This)->lpVtbl->GetTypeInfoOfGuid(This,guid,ppTinfo)")
cpp_quote("#define ITypeLib2_GetLibAttr(This,ppTLibAttr) (This)->lpVtbl->GetLibAttr(This,ppTLibAttr)")
cpp_quote("#define ITypeLib2_GetTypeComp(This,ppTComp) (This)->lpVtbl->GetTypeComp(This,ppTComp)")
cpp_quote("#define ITypeLib2_GetDocumentation(This,index,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile) (This)->lpVtbl->GetDocumentation(This,index,pBstrName,pBstrDocString,pdwHelpContext,pBstrHelpFile)")
cpp_quote("#define ITypeLib2_IsName(This,szNameBuf,lHashVal,pfName) (This)->lpVtbl->IsName(This,szNameBuf,lHashVal,pfName)")
cpp_quote("#define ITypeLib2_FindName(This,szNameBuf,lHashVal,ppTInfo,rgMemId,pcFound) (This)->lpVtbl->FindName(This,szNameBuf,lHashVal,ppTInfo,rgMemId,pcFound)")
cpp_quote("#define ITypeLib2_ReleaseTLibAttr(This,pTLibAttr) (This)->lpVtbl->ReleaseTLibAttr(This,pTLibAttr)")
cpp_quote("#define ITypeLib2_GetCustData(This,guid,pVarVal) (This)->lpVtbl->GetCustData(This,guid,pVarVal)")
cpp_quote("#define ITypeLib2_GetLibStatistics(This,pcUniqueNames,pcchUniqueNames) (This)->lpVtbl->GetLibStatistics(This,pcUniqueNames,pcchUniqueNames)")
cpp_quote("#define ITypeLib2_GetDocumentation2(This,index,lcid,pbstrHelpString,pdwHelpStringContext,pbstrHelpStringDll) (This)->lpVtbl->GetDocumentation2(This,index,lcid,pbstrHelpString,pdwHelpStringContext,pbstrHelpStringDll)")
cpp_quote("#define ITypeLib2_GetAllCustData(This,pCustData) (This)->lpVtbl->GetAllCustData(This,pCustData)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ITypeLib2_GetCustData_Proxy(ITypeLib2 *This,REFGUID guid,VARIANT *pVarVal);")
cpp_quote("  void __RPC_STUB ITypeLib2_GetCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeLib2_RemoteGetLibStatistics_Proxy(ITypeLib2 *This,ULONG *pcUniqueNames,ULONG *pcchUniqueNames);")
cpp_quote("  void __RPC_STUB ITypeLib2_RemoteGetLibStatistics_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeLib2_RemoteGetDocumentation2_Proxy(ITypeLib2 *This,INT index,LCID lcid,DWORD refPtrFlags,BSTR *pbstrHelpString,DWORD *pdwHelpStringContext,BSTR *pbstrHelpStringDll);")
cpp_quote("  void __RPC_STUB ITypeLib2_RemoteGetDocumentation2_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeLib2_GetAllCustData_Proxy(ITypeLib2 *This,CUSTDATA *pCustData);")
cpp_quote("  void __RPC_STUB ITypeLib2_GetAllCustData_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ITypeChangeEvents_INTERFACE_DEFINED__")
cpp_quote("#define __ITypeChangeEvents_INTERFACE_DEFINED__")
cpp_quote("  typedef ITypeChangeEvents *LPTYPECHANGEEVENTS;")
cpp_quote("")
cpp_quote("  typedef enum tagCHANGEKIND {")
cpp_quote("    CHANGEKIND_ADDMEMBER = 0,")
cpp_quote("    CHANGEKIND_DELETEMEMBER,CHANGEKIND_SETNAMES,CHANGEKIND_SETDOCUMENTATION,")
cpp_quote("    CHANGEKIND_GENERAL,CHANGEKIND_INVALIDATE,CHANGEKIND_CHANGEFAILED,")
cpp_quote("    CHANGEKIND_MAX")
cpp_quote("  } CHANGEKIND;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_ITypeChangeEvents;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ITypeChangeEvents : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI RequestTypeChange(CHANGEKIND changeKind,ITypeInfo *pTInfoBefore,LPOLESTR pStrName,INT *pfCancel) = 0;")
cpp_quote("    virtual HRESULT WINAPI AfterTypeChange(CHANGEKIND changeKind,ITypeInfo *pTInfoAfter,LPOLESTR pStrName) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ITypeChangeEventsVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ITypeChangeEvents *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ITypeChangeEvents *This);")
cpp_quote("      ULONG (WINAPI *Release)(ITypeChangeEvents *This);")
cpp_quote("      HRESULT (WINAPI *RequestTypeChange)(ITypeChangeEvents *This,CHANGEKIND changeKind,ITypeInfo *pTInfoBefore,LPOLESTR pStrName,INT *pfCancel);")
cpp_quote("      HRESULT (WINAPI *AfterTypeChange)(ITypeChangeEvents *This,CHANGEKIND changeKind,ITypeInfo *pTInfoAfter,LPOLESTR pStrName);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ITypeChangeEventsVtbl;")
cpp_quote("  struct ITypeChangeEvents {")
cpp_quote("    CONST_VTBL struct ITypeChangeEventsVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ITypeChangeEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ITypeChangeEvents_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ITypeChangeEvents_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ITypeChangeEvents_RequestTypeChange(This,changeKind,pTInfoBefore,pStrName,pfCancel) (This)->lpVtbl->RequestTypeChange(This,changeKind,pTInfoBefore,pStrName,pfCancel)")
cpp_quote("#define ITypeChangeEvents_AfterTypeChange(This,changeKind,pTInfoAfter,pStrName) (This)->lpVtbl->AfterTypeChange(This,changeKind,pTInfoAfter,pStrName)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ITypeChangeEvents_RequestTypeChange_Proxy(ITypeChangeEvents *This,CHANGEKIND changeKind,ITypeInfo *pTInfoBefore,LPOLESTR pStrName,INT *pfCancel);")
cpp_quote("  void __RPC_STUB ITypeChangeEvents_RequestTypeChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeChangeEvents_AfterTypeChange_Proxy(ITypeChangeEvents *This,CHANGEKIND changeKind,ITypeInfo *pTInfoAfter,LPOLESTR pStrName);")
cpp_quote("  void __RPC_STUB ITypeChangeEvents_AfterTypeChange_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IErrorInfo_INTERFACE_DEFINED__")
cpp_quote("#define __IErrorInfo_INTERFACE_DEFINED__")
cpp_quote("  typedef IErrorInfo *LPERRORINFO;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IErrorInfo;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IErrorInfo : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI GetGUID(GUID *pGUID) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetSource(BSTR *pBstrSource) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetDescription(BSTR *pBstrDescription) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetHelpFile(BSTR *pBstrHelpFile) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetHelpContext(DWORD *pdwHelpContext) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IErrorInfoVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IErrorInfo *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IErrorInfo *This);")
cpp_quote("      ULONG (WINAPI *Release)(IErrorInfo *This);")
cpp_quote("      HRESULT (WINAPI *GetGUID)(IErrorInfo *This,GUID *pGUID);")
cpp_quote("      HRESULT (WINAPI *GetSource)(IErrorInfo *This,BSTR *pBstrSource);")
cpp_quote("      HRESULT (WINAPI *GetDescription)(IErrorInfo *This,BSTR *pBstrDescription);")
cpp_quote("      HRESULT (WINAPI *GetHelpFile)(IErrorInfo *This,BSTR *pBstrHelpFile);")
cpp_quote("      HRESULT (WINAPI *GetHelpContext)(IErrorInfo *This,DWORD *pdwHelpContext);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IErrorInfoVtbl;")
cpp_quote("  struct IErrorInfo {")
cpp_quote("    CONST_VTBL struct IErrorInfoVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IErrorInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IErrorInfo_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IErrorInfo_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IErrorInfo_GetGUID(This,pGUID) (This)->lpVtbl->GetGUID(This,pGUID)")
cpp_quote("#define IErrorInfo_GetSource(This,pBstrSource) (This)->lpVtbl->GetSource(This,pBstrSource)")
cpp_quote("#define IErrorInfo_GetDescription(This,pBstrDescription) (This)->lpVtbl->GetDescription(This,pBstrDescription)")
cpp_quote("#define IErrorInfo_GetHelpFile(This,pBstrHelpFile) (This)->lpVtbl->GetHelpFile(This,pBstrHelpFile)")
cpp_quote("#define IErrorInfo_GetHelpContext(This,pdwHelpContext) (This)->lpVtbl->GetHelpContext(This,pdwHelpContext)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IErrorInfo_GetGUID_Proxy(IErrorInfo *This,GUID *pGUID);")
cpp_quote("  void __RPC_STUB IErrorInfo_GetGUID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IErrorInfo_GetSource_Proxy(IErrorInfo *This,BSTR *pBstrSource);")
cpp_quote("  void __RPC_STUB IErrorInfo_GetSource_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IErrorInfo_GetDescription_Proxy(IErrorInfo *This,BSTR *pBstrDescription);")
cpp_quote("  void __RPC_STUB IErrorInfo_GetDescription_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IErrorInfo_GetHelpFile_Proxy(IErrorInfo *This,BSTR *pBstrHelpFile);")
cpp_quote("  void __RPC_STUB IErrorInfo_GetHelpFile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IErrorInfo_GetHelpContext_Proxy(IErrorInfo *This,DWORD *pdwHelpContext);")
cpp_quote("  void __RPC_STUB IErrorInfo_GetHelpContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ICreateErrorInfo_INTERFACE_DEFINED__")
cpp_quote("#define __ICreateErrorInfo_INTERFACE_DEFINED__")
cpp_quote("  typedef ICreateErrorInfo *LPCREATEERRORINFO;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_ICreateErrorInfo;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ICreateErrorInfo : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI SetGUID(REFGUID rguid) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetSource(LPOLESTR szSource) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetDescription(LPOLESTR szDescription) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetHelpFile(LPOLESTR szHelpFile) = 0;")
cpp_quote("    virtual HRESULT WINAPI SetHelpContext(DWORD dwHelpContext) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ICreateErrorInfoVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ICreateErrorInfo *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ICreateErrorInfo *This);")
cpp_quote("      ULONG (WINAPI *Release)(ICreateErrorInfo *This);")
cpp_quote("      HRESULT (WINAPI *SetGUID)(ICreateErrorInfo *This,REFGUID rguid);")
cpp_quote("      HRESULT (WINAPI *SetSource)(ICreateErrorInfo *This,LPOLESTR szSource);")
cpp_quote("      HRESULT (WINAPI *SetDescription)(ICreateErrorInfo *This,LPOLESTR szDescription);")
cpp_quote("      HRESULT (WINAPI *SetHelpFile)(ICreateErrorInfo *This,LPOLESTR szHelpFile);")
cpp_quote("      HRESULT (WINAPI *SetHelpContext)(ICreateErrorInfo *This,DWORD dwHelpContext);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ICreateErrorInfoVtbl;")
cpp_quote("  struct ICreateErrorInfo {")
cpp_quote("    CONST_VTBL struct ICreateErrorInfoVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ICreateErrorInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ICreateErrorInfo_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ICreateErrorInfo_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ICreateErrorInfo_SetGUID(This,rguid) (This)->lpVtbl->SetGUID(This,rguid)")
cpp_quote("#define ICreateErrorInfo_SetSource(This,szSource) (This)->lpVtbl->SetSource(This,szSource)")
cpp_quote("#define ICreateErrorInfo_SetDescription(This,szDescription) (This)->lpVtbl->SetDescription(This,szDescription)")
cpp_quote("#define ICreateErrorInfo_SetHelpFile(This,szHelpFile) (This)->lpVtbl->SetHelpFile(This,szHelpFile)")
cpp_quote("#define ICreateErrorInfo_SetHelpContext(This,dwHelpContext) (This)->lpVtbl->SetHelpContext(This,dwHelpContext)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ICreateErrorInfo_SetGUID_Proxy(ICreateErrorInfo *This,REFGUID rguid);")
cpp_quote("  void __RPC_STUB ICreateErrorInfo_SetGUID_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateErrorInfo_SetSource_Proxy(ICreateErrorInfo *This,LPOLESTR szSource);")
cpp_quote("  void __RPC_STUB ICreateErrorInfo_SetSource_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateErrorInfo_SetDescription_Proxy(ICreateErrorInfo *This,LPOLESTR szDescription);")
cpp_quote("  void __RPC_STUB ICreateErrorInfo_SetDescription_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateErrorInfo_SetHelpFile_Proxy(ICreateErrorInfo *This,LPOLESTR szHelpFile);")
cpp_quote("  void __RPC_STUB ICreateErrorInfo_SetHelpFile_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ICreateErrorInfo_SetHelpContext_Proxy(ICreateErrorInfo *This,DWORD dwHelpContext);")
cpp_quote("  void __RPC_STUB ICreateErrorInfo_SetHelpContext_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ISupportErrorInfo_INTERFACE_DEFINED__")
cpp_quote("#define __ISupportErrorInfo_INTERFACE_DEFINED__")
cpp_quote("  typedef ISupportErrorInfo *LPSUPPORTERRORINFO;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_ISupportErrorInfo;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ISupportErrorInfo : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI InterfaceSupportsErrorInfo(REFIID riid) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ISupportErrorInfoVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ISupportErrorInfo *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ISupportErrorInfo *This);")
cpp_quote("      ULONG (WINAPI *Release)(ISupportErrorInfo *This);")
cpp_quote("      HRESULT (WINAPI *InterfaceSupportsErrorInfo)(ISupportErrorInfo *This,REFIID riid);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ISupportErrorInfoVtbl;")
cpp_quote("  struct ISupportErrorInfo {")
cpp_quote("    CONST_VTBL struct ISupportErrorInfoVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ISupportErrorInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ISupportErrorInfo_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ISupportErrorInfo_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ISupportErrorInfo_InterfaceSupportsErrorInfo(This,riid) (This)->lpVtbl->InterfaceSupportsErrorInfo(This,riid)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ISupportErrorInfo_InterfaceSupportsErrorInfo_Proxy(ISupportErrorInfo *This,REFIID riid);")
cpp_quote("  void __RPC_STUB ISupportErrorInfo_InterfaceSupportsErrorInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ITypeFactory_INTERFACE_DEFINED__")
cpp_quote("#define __ITypeFactory_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_ITypeFactory;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ITypeFactory : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI CreateFromTypeInfo(ITypeInfo *pTypeInfo,REFIID riid,IUnknown **ppv) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ITypeFactoryVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ITypeFactory *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ITypeFactory *This);")
cpp_quote("      ULONG (WINAPI *Release)(ITypeFactory *This);")
cpp_quote("      HRESULT (WINAPI *CreateFromTypeInfo)(ITypeFactory *This,ITypeInfo *pTypeInfo,REFIID riid,IUnknown **ppv);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ITypeFactoryVtbl;")
cpp_quote("  struct ITypeFactory {")
cpp_quote("    CONST_VTBL struct ITypeFactoryVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ITypeFactory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ITypeFactory_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ITypeFactory_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ITypeFactory_CreateFromTypeInfo(This,pTypeInfo,riid,ppv) (This)->lpVtbl->CreateFromTypeInfo(This,pTypeInfo,riid,ppv)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ITypeFactory_CreateFromTypeInfo_Proxy(ITypeFactory *This,ITypeInfo *pTypeInfo,REFIID riid,IUnknown **ppv);")
cpp_quote("  void __RPC_STUB ITypeFactory_CreateFromTypeInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __ITypeMarshal_INTERFACE_DEFINED__")
cpp_quote("#define __ITypeMarshal_INTERFACE_DEFINED__")
cpp_quote("  EXTERN_C const IID IID_ITypeMarshal;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct ITypeMarshal : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Size(PVOID pvType,DWORD dwDestContext,PVOID pvDestContext,ULONG *pSize) = 0;")
cpp_quote("    virtual HRESULT WINAPI Marshal(PVOID pvType,DWORD dwDestContext,PVOID pvDestContext,ULONG cbBufferLength,BYTE *pBuffer,ULONG *pcbWritten) = 0;")
cpp_quote("    virtual HRESULT WINAPI Unmarshal(PVOID pvType,DWORD dwFlags,ULONG cbBufferLength,BYTE *pBuffer,ULONG *pcbRead) = 0;")
cpp_quote("    virtual HRESULT WINAPI Free(PVOID pvType) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct ITypeMarshalVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(ITypeMarshal *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(ITypeMarshal *This);")
cpp_quote("      ULONG (WINAPI *Release)(ITypeMarshal *This);")
cpp_quote("      HRESULT (WINAPI *Size)(ITypeMarshal *This,PVOID pvType,DWORD dwDestContext,PVOID pvDestContext,ULONG *pSize);")
cpp_quote("      HRESULT (WINAPI *Marshal)(ITypeMarshal *This,PVOID pvType,DWORD dwDestContext,PVOID pvDestContext,ULONG cbBufferLength,BYTE *pBuffer,ULONG *pcbWritten);")
cpp_quote("      HRESULT (WINAPI *Unmarshal)(ITypeMarshal *This,PVOID pvType,DWORD dwFlags,ULONG cbBufferLength,BYTE *pBuffer,ULONG *pcbRead);")
cpp_quote("      HRESULT (WINAPI *Free)(ITypeMarshal *This,PVOID pvType);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } ITypeMarshalVtbl;")
cpp_quote("  struct ITypeMarshal {")
cpp_quote("    CONST_VTBL struct ITypeMarshalVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define ITypeMarshal_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define ITypeMarshal_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define ITypeMarshal_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define ITypeMarshal_Size(This,pvType,dwDestContext,pvDestContext,pSize) (This)->lpVtbl->Size(This,pvType,dwDestContext,pvDestContext,pSize)")
cpp_quote("#define ITypeMarshal_Marshal(This,pvType,dwDestContext,pvDestContext,cbBufferLength,pBuffer,pcbWritten) (This)->lpVtbl->Marshal(This,pvType,dwDestContext,pvDestContext,cbBufferLength,pBuffer,pcbWritten)")
cpp_quote("#define ITypeMarshal_Unmarshal(This,pvType,dwFlags,cbBufferLength,pBuffer,pcbRead) (This)->lpVtbl->Unmarshal(This,pvType,dwFlags,cbBufferLength,pBuffer,pcbRead)")
cpp_quote("#define ITypeMarshal_Free(This,pvType) (This)->lpVtbl->Free(This,pvType)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI ITypeMarshal_Size_Proxy(ITypeMarshal *This,PVOID pvType,DWORD dwDestContext,PVOID pvDestContext,ULONG *pSize);")
cpp_quote("  void __RPC_STUB ITypeMarshal_Size_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeMarshal_Marshal_Proxy(ITypeMarshal *This,PVOID pvType,DWORD dwDestContext,PVOID pvDestContext,ULONG cbBufferLength,BYTE *pBuffer,ULONG *pcbWritten);")
cpp_quote("  void __RPC_STUB ITypeMarshal_Marshal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeMarshal_Unmarshal_Proxy(ITypeMarshal *This,PVOID pvType,DWORD dwFlags,ULONG cbBufferLength,BYTE *pBuffer,ULONG *pcbRead);")
cpp_quote("  void __RPC_STUB ITypeMarshal_Unmarshal_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI ITypeMarshal_Free_Proxy(ITypeMarshal *This,PVOID pvType);")
cpp_quote("  void __RPC_STUB ITypeMarshal_Free_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("#ifndef __IRecordInfo_INTERFACE_DEFINED__")
cpp_quote("#define __IRecordInfo_INTERFACE_DEFINED__")
cpp_quote("  typedef IRecordInfo *LPRECORDINFO;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IRecordInfo;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IRecordInfo : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI RecordInit(PVOID pvNew) = 0;")
cpp_quote("    virtual HRESULT WINAPI RecordClear(PVOID pvExisting) = 0;")
cpp_quote("    virtual HRESULT WINAPI RecordCopy(PVOID pvExisting,PVOID pvNew) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetGuid(GUID *pguid) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetName(BSTR *pbstrName) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetSize(ULONG *pcbSize) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetTypeInfo(ITypeInfo **ppTypeInfo) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetField(PVOID pvData,LPCOLESTR szFieldName,VARIANT *pvarField) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetFieldNoCopy(PVOID pvData,LPCOLESTR szFieldName,VARIANT *pvarField,PVOID *ppvDataCArray) = 0;")
cpp_quote("    virtual HRESULT WINAPI PutField(ULONG wFlags,PVOID pvData,LPCOLESTR szFieldName,VARIANT *pvarField) = 0;")
cpp_quote("    virtual HRESULT WINAPI PutFieldNoCopy(ULONG wFlags,PVOID pvData,LPCOLESTR szFieldName,VARIANT *pvarField) = 0;")
cpp_quote("    virtual HRESULT WINAPI GetFieldNames(ULONG *pcNames,BSTR *rgBstrNames) = 0;")
cpp_quote("    virtual WINBOOL WINAPI IsMatchingType(IRecordInfo *pRecordInfo) = 0;")
cpp_quote("    virtual PVOID WINAPI RecordCreate(void) = 0;")
cpp_quote("    virtual HRESULT WINAPI RecordCreateCopy(PVOID pvSource,PVOID *ppvDest) = 0;")
cpp_quote("    virtual HRESULT WINAPI RecordDestroy(PVOID pvRecord) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IRecordInfoVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IRecordInfo *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IRecordInfo *This);")
cpp_quote("      ULONG (WINAPI *Release)(IRecordInfo *This);")
cpp_quote("      HRESULT (WINAPI *RecordInit)(IRecordInfo *This,PVOID pvNew);")
cpp_quote("      HRESULT (WINAPI *RecordClear)(IRecordInfo *This,PVOID pvExisting);")
cpp_quote("      HRESULT (WINAPI *RecordCopy)(IRecordInfo *This,PVOID pvExisting,PVOID pvNew);")
cpp_quote("      HRESULT (WINAPI *GetGuid)(IRecordInfo *This,GUID *pguid);")
cpp_quote("      HRESULT (WINAPI *GetName)(IRecordInfo *This,BSTR *pbstrName);")
cpp_quote("      HRESULT (WINAPI *GetSize)(IRecordInfo *This,ULONG *pcbSize);")
cpp_quote("      HRESULT (WINAPI *GetTypeInfo)(IRecordInfo *This,ITypeInfo **ppTypeInfo);")
cpp_quote("      HRESULT (WINAPI *GetField)(IRecordInfo *This,PVOID pvData,LPCOLESTR szFieldName,VARIANT *pvarField);")
cpp_quote("      HRESULT (WINAPI *GetFieldNoCopy)(IRecordInfo *This,PVOID pvData,LPCOLESTR szFieldName,VARIANT *pvarField,PVOID *ppvDataCArray);")
cpp_quote("      HRESULT (WINAPI *PutField)(IRecordInfo *This,ULONG wFlags,PVOID pvData,LPCOLESTR szFieldName,VARIANT *pvarField);")
cpp_quote("      HRESULT (WINAPI *PutFieldNoCopy)(IRecordInfo *This,ULONG wFlags,PVOID pvData,LPCOLESTR szFieldName,VARIANT *pvarField);")
cpp_quote("      HRESULT (WINAPI *GetFieldNames)(IRecordInfo *This,ULONG *pcNames,BSTR *rgBstrNames);")
cpp_quote("      WINBOOL (WINAPI *IsMatchingType)(IRecordInfo *This,IRecordInfo *pRecordInfo);")
cpp_quote("      PVOID (WINAPI *RecordCreate)(IRecordInfo *This);")
cpp_quote("      HRESULT (WINAPI *RecordCreateCopy)(IRecordInfo *This,PVOID pvSource,PVOID *ppvDest);")
cpp_quote("      HRESULT (WINAPI *RecordDestroy)(IRecordInfo *This,PVOID pvRecord);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IRecordInfoVtbl;")
cpp_quote("  struct IRecordInfo {")
cpp_quote("    CONST_VTBL struct IRecordInfoVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IRecordInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IRecordInfo_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IRecordInfo_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IRecordInfo_RecordInit(This,pvNew) (This)->lpVtbl->RecordInit(This,pvNew)")
cpp_quote("#define IRecordInfo_RecordClear(This,pvExisting) (This)->lpVtbl->RecordClear(This,pvExisting)")
cpp_quote("#define IRecordInfo_RecordCopy(This,pvExisting,pvNew) (This)->lpVtbl->RecordCopy(This,pvExisting,pvNew)")
cpp_quote("#define IRecordInfo_GetGuid(This,pguid) (This)->lpVtbl->GetGuid(This,pguid)")
cpp_quote("#define IRecordInfo_GetName(This,pbstrName) (This)->lpVtbl->GetName(This,pbstrName)")
cpp_quote("#define IRecordInfo_GetSize(This,pcbSize) (This)->lpVtbl->GetSize(This,pcbSize)")
cpp_quote("#define IRecordInfo_GetTypeInfo(This,ppTypeInfo) (This)->lpVtbl->GetTypeInfo(This,ppTypeInfo)")
cpp_quote("#define IRecordInfo_GetField(This,pvData,szFieldName,pvarField) (This)->lpVtbl->GetField(This,pvData,szFieldName,pvarField)")
cpp_quote("#define IRecordInfo_GetFieldNoCopy(This,pvData,szFieldName,pvarField,ppvDataCArray) (This)->lpVtbl->GetFieldNoCopy(This,pvData,szFieldName,pvarField,ppvDataCArray)")
cpp_quote("#define IRecordInfo_PutField(This,wFlags,pvData,szFieldName,pvarField) (This)->lpVtbl->PutField(This,wFlags,pvData,szFieldName,pvarField)")
cpp_quote("#define IRecordInfo_PutFieldNoCopy(This,wFlags,pvData,szFieldName,pvarField) (This)->lpVtbl->PutFieldNoCopy(This,wFlags,pvData,szFieldName,pvarField)")
cpp_quote("#define IRecordInfo_GetFieldNames(This,pcNames,rgBstrNames) (This)->lpVtbl->GetFieldNames(This,pcNames,rgBstrNames)")
cpp_quote("#define IRecordInfo_IsMatchingType(This,pRecordInfo) (This)->lpVtbl->IsMatchingType(This,pRecordInfo)")
cpp_quote("#define IRecordInfo_RecordCreate(This) (This)->lpVtbl->RecordCreate(This)")
cpp_quote("#define IRecordInfo_RecordCreateCopy(This,pvSource,ppvDest) (This)->lpVtbl->RecordCreateCopy(This,pvSource,ppvDest)")
cpp_quote("#define IRecordInfo_RecordDestroy(This,pvRecord) (This)->lpVtbl->RecordDestroy(This,pvRecord)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IRecordInfo_RecordInit_Proxy(IRecordInfo *This,PVOID pvNew);")
cpp_quote("  void __RPC_STUB IRecordInfo_RecordInit_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRecordInfo_RecordClear_Proxy(IRecordInfo *This,PVOID pvExisting);")
cpp_quote("  void __RPC_STUB IRecordInfo_RecordClear_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRecordInfo_RecordCopy_Proxy(IRecordInfo *This,PVOID pvExisting,PVOID pvNew);")
cpp_quote("  void __RPC_STUB IRecordInfo_RecordCopy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRecordInfo_GetGuid_Proxy(IRecordInfo *This,GUID *pguid);")
cpp_quote("  void __RPC_STUB IRecordInfo_GetGuid_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRecordInfo_GetName_Proxy(IRecordInfo *This,BSTR *pbstrName);")
cpp_quote("  void __RPC_STUB IRecordInfo_GetName_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRecordInfo_GetSize_Proxy(IRecordInfo *This,ULONG *pcbSize);")
cpp_quote("  void __RPC_STUB IRecordInfo_GetSize_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRecordInfo_GetTypeInfo_Proxy(IRecordInfo *This,ITypeInfo **ppTypeInfo);")
cpp_quote("  void __RPC_STUB IRecordInfo_GetTypeInfo_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRecordInfo_GetField_Proxy(IRecordInfo *This,PVOID pvData,LPCOLESTR szFieldName,VARIANT *pvarField);")
cpp_quote("  void __RPC_STUB IRecordInfo_GetField_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRecordInfo_GetFieldNoCopy_Proxy(IRecordInfo *This,PVOID pvData,LPCOLESTR szFieldName,VARIANT *pvarField,PVOID *ppvDataCArray);")
cpp_quote("  void __RPC_STUB IRecordInfo_GetFieldNoCopy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRecordInfo_PutField_Proxy(IRecordInfo *This,ULONG wFlags,PVOID pvData,LPCOLESTR szFieldName,VARIANT *pvarField);")
cpp_quote("  void __RPC_STUB IRecordInfo_PutField_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRecordInfo_PutFieldNoCopy_Proxy(IRecordInfo *This,ULONG wFlags,PVOID pvData,LPCOLESTR szFieldName,VARIANT *pvarField);")
cpp_quote("  void __RPC_STUB IRecordInfo_PutFieldNoCopy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRecordInfo_GetFieldNames_Proxy(IRecordInfo *This,ULONG *pcNames,BSTR *rgBstrNames);")
cpp_quote("  void __RPC_STUB IRecordInfo_GetFieldNames_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  WINBOOL WINAPI IRecordInfo_IsMatchingType_Proxy(IRecordInfo *This,IRecordInfo *pRecordInfo);")
cpp_quote("  void __RPC_STUB IRecordInfo_IsMatchingType_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  PVOID WINAPI IRecordInfo_RecordCreate_Proxy(IRecordInfo *This);")
cpp_quote("  void __RPC_STUB IRecordInfo_RecordCreate_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRecordInfo_RecordCreateCopy_Proxy(IRecordInfo *This,PVOID pvSource,PVOID *ppvDest);")
cpp_quote("  void __RPC_STUB IRecordInfo_RecordCreateCopy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IRecordInfo_RecordDestroy_Proxy(IRecordInfo *This,PVOID pvRecord);")
cpp_quote("  void __RPC_STUB IRecordInfo_RecordDestroy_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")

[
    object,
    uuid(3127Ca40-446e-11ce-8135-00aa004bb851),
    pointer_default(unique)
]
interface IErrorLog : IUnknown
{
    typedef IErrorLog *LPERRORLOG;

    HRESULT AddError(
            [in] LPCOLESTR pszPropName,
            [in] EXCEPINFO *pExcepInfo);
}

cpp_quote("#ifndef __IPropertyBag_INTERFACE_DEFINED__")
cpp_quote("#define __IPropertyBag_INTERFACE_DEFINED__")
cpp_quote("  typedef IPropertyBag *LPPROPERTYBAG;")
cpp_quote("")
cpp_quote("  EXTERN_C const IID IID_IPropertyBag;")
cpp_quote("#if defined(__cplusplus) && !defined(CINTERFACE)")
cpp_quote("  struct IPropertyBag : public IUnknown {")
cpp_quote("  public:")
cpp_quote("    virtual HRESULT WINAPI Read(LPCOLESTR pszPropName,VARIANT *pVar,IErrorLog *pErrorLog) = 0;")
cpp_quote("    virtual HRESULT WINAPI Write(LPCOLESTR pszPropName,VARIANT *pVar) = 0;")
cpp_quote("  };")
cpp_quote("#else")
cpp_quote("  typedef struct IPropertyBagVtbl {")
cpp_quote("    BEGIN_INTERFACE")
cpp_quote("      HRESULT (WINAPI *QueryInterface)(IPropertyBag *This,REFIID riid,void **ppvObject);")
cpp_quote("      ULONG (WINAPI *AddRef)(IPropertyBag *This);")
cpp_quote("      ULONG (WINAPI *Release)(IPropertyBag *This);")
cpp_quote("      HRESULT (WINAPI *Read)(IPropertyBag *This,LPCOLESTR pszPropName,VARIANT *pVar,IErrorLog *pErrorLog);")
cpp_quote("      HRESULT (WINAPI *Write)(IPropertyBag *This,LPCOLESTR pszPropName,VARIANT *pVar);")
cpp_quote("    END_INTERFACE")
cpp_quote("  } IPropertyBagVtbl;")
cpp_quote("  struct IPropertyBag {")
cpp_quote("    CONST_VTBL struct IPropertyBagVtbl *lpVtbl;")
cpp_quote("  };")
cpp_quote("#ifdef COBJMACROS")
cpp_quote("#define IPropertyBag_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)")
cpp_quote("#define IPropertyBag_AddRef(This) (This)->lpVtbl->AddRef(This)")
cpp_quote("#define IPropertyBag_Release(This) (This)->lpVtbl->Release(This)")
cpp_quote("#define IPropertyBag_Read(This,pszPropName,pVar,pErrorLog) (This)->lpVtbl->Read(This,pszPropName,pVar,pErrorLog)")
cpp_quote("#define IPropertyBag_Write(This,pszPropName,pVar) (This)->lpVtbl->Write(This,pszPropName,pVar)")
cpp_quote("#endif")
cpp_quote("#endif")
cpp_quote("  HRESULT WINAPI IPropertyBag_RemoteRead_Proxy(IPropertyBag *This,LPCOLESTR pszPropName,VARIANT *pVar,IErrorLog *pErrorLog,DWORD varType,IUnknown *pUnkObj);")
cpp_quote("  void __RPC_STUB IPropertyBag_RemoteRead_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("  HRESULT WINAPI IPropertyBag_Write_Proxy(IPropertyBag *This,LPCOLESTR pszPropName,VARIANT *pVar);")
cpp_quote("  void __RPC_STUB IPropertyBag_Write_Stub(IRpcStubBuffer *This,IRpcChannelBuffer *_pRpcChannelBuffer,PRPC_MESSAGE _pRpcMessage,DWORD *_pdwStubPhase);")
cpp_quote("#endif")
cpp_quote("")
cpp_quote("  HRESULT WINAPI IEnumVARIANT_Next_Proxy(IEnumVARIANT *This,ULONG celt,VARIANT *rgVar,ULONG *pCeltFetched);")
cpp_quote("  HRESULT WINAPI IEnumVARIANT_Next_Stub(IEnumVARIANT *This,ULONG celt,VARIANT *rgVar,ULONG *pCeltFetched);")
cpp_quote("  HRESULT WINAPI ITypeInfo2_GetDocumentation2_Proxy(ITypeInfo2 *This,MEMBERID memid,LCID lcid,BSTR *pbstrHelpString,DWORD *pdwHelpStringContext,BSTR *pbstrHelpStringDll);")
cpp_quote("  HRESULT WINAPI ITypeInfo2_GetDocumentation2_Stub(ITypeInfo2 *This,MEMBERID memid,LCID lcid,DWORD refPtrFlags,BSTR *pbstrHelpString,DWORD *pdwHelpStringContext,BSTR *pbstrHelpStringDll);")
cpp_quote("  HRESULT WINAPI ITypeLib2_GetLibStatistics_Proxy(ITypeLib2 *This,ULONG *pcUniqueNames,ULONG *pcchUniqueNames);")
cpp_quote("  HRESULT WINAPI ITypeLib2_GetLibStatistics_Stub(ITypeLib2 *This,ULONG *pcUniqueNames,ULONG *pcchUniqueNames);")
cpp_quote("  HRESULT WINAPI ITypeLib2_GetDocumentation2_Proxy(ITypeLib2 *This,INT index,LCID lcid,BSTR *pbstrHelpString,DWORD *pdwHelpStringContext,BSTR *pbstrHelpStringDll);")
cpp_quote("  HRESULT WINAPI ITypeLib2_GetDocumentation2_Stub(ITypeLib2 *This,INT index,LCID lcid,DWORD refPtrFlags,BSTR *pbstrHelpString,DWORD *pdwHelpStringContext,BSTR *pbstrHelpStringDll);")
cpp_quote("  HRESULT WINAPI IPropertyBag_Read_Proxy(IPropertyBag *This,LPCOLESTR pszPropName,VARIANT *pVar,IErrorLog *pErrorLog);")
cpp_quote("  HRESULT WINAPI IPropertyBag_Read_Stub(IPropertyBag *This,LPCOLESTR pszPropName,VARIANT *pVar,IErrorLog *pErrorLog,DWORD varType,IUnknown *pUnkObj);")
