| /* | 
 |  * Copyright 2002 Ove Kaaven | 
 |  * | 
 |  * This library is free software; you can redistribute it and/or | 
 |  * modify it under the terms of the GNU Lesser General Public | 
 |  * License as published by the Free Software Foundation; either | 
 |  * version 2.1 of the License, or (at your option) any later version. | 
 |  * | 
 |  * This library is distributed in the hope that it will be useful, | 
 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
 |  * Lesser General Public License for more details. | 
 |  * | 
 |  * You should have received a copy of the GNU Lesser General Public | 
 |  * License along with this library; if not, write to the Free Software | 
 |  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | 
 |  */ | 
 |  | 
 | import "objidl.idl"; | 
 |  | 
 | interface IDispatch; | 
 | interface ITypeInfo; | 
 | interface ITypeLib; | 
 | interface IRecordInfo; | 
 |  | 
 | [ | 
 |   version(1.0), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface IOleAutomationTypes | 
 | { | 
 |  | 
 | typedef CY CURRENCY; | 
 |  | 
 | /* Safe Array */ | 
 |  | 
 | 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; | 
 |  | 
 | const USHORT FADF_AUTO        = 0x0001; | 
 | const USHORT FADF_STATIC      = 0x0002; | 
 | const USHORT FADF_EMBEDDED    = 0x0004; | 
 | const USHORT FADF_FIXEDSIZE   = 0x0010; | 
 | const USHORT FADF_RECORD      = 0x0020; | 
 | const USHORT FADF_HAVEIID     = 0x0040; | 
 | const USHORT FADF_HAVEVARTYPE = 0x0080; | 
 | const USHORT FADF_BSTR        = 0x0100; | 
 | const USHORT FADF_UNKNOWN     = 0x0200; | 
 | const USHORT FADF_DISPATCH    = 0x0400; | 
 | const USHORT FADF_VARIANT     = 0x0800; | 
 | const USHORT FADF_RESERVED    = 0xF008; | 
 | /* Undocumented flags */ | 
 | const USHORT FADF_DATADELETED  = 0x1000; /* Data in a vector has been deleted */ | 
 | const USHORT FADF_CREATEVECTOR = 0x2000; /* This array is a vector */ | 
 |  | 
 | /* Variant */ | 
 |  | 
 | cpp_quote("#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || 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 { | 
 |         signed char cVal; | 
 |         USHORT uiVal; | 
 |         ULONG ulVal; | 
 |         INT intVal; | 
 |         UINT uintVal; | 
 |         BYTE bVal; | 
 |         SHORT iVal; | 
 |         LONG lVal; | 
 |         FLOAT fltVal; | 
 |         DOUBLE dblVal; | 
 |         VARIANT_BOOL boolVal; | 
 | #if 0 /* illegal in C++ */ | 
 |         _VARIANT_BOOL bool; | 
 | #endif | 
 |         SCODE scode; | 
 |         DATE date; | 
 |         BSTR bstrVal; | 
 |         CY cyVal; | 
 |         IUnknown *punkVal; | 
 |         IDispatch *pdispVal; | 
 |         SAFEARRAY *parray; | 
 |         LONGLONG llVal; | 
 |         ULONGLONG ullVal; | 
 |         signed char *pcVal; | 
 |         USHORT *puiVal; | 
 |         ULONG *pulVal; | 
 |         INT *pintVal; | 
 |         UINT *puintVal; | 
 |         BYTE *pbVal; | 
 |         SHORT *piVal; | 
 |         LONG *plVal; | 
 |         FLOAT *pfltVal; | 
 |         DOUBLE *pdblVal; | 
 |         VARIANT_BOOL *pboolVal; | 
 | #if 0 | 
 |         _VARIANT_BOOL *pbool; | 
 | #endif | 
 |         SCODE *pscode; | 
 |         DATE *pdate; | 
 |         BSTR *pbstrVal; | 
 |         VARIANT *pvarVal; | 
 |         PVOID byref; | 
 |         CY *pcyVal; | 
 |         DECIMAL *pdecVal; | 
 |         IUnknown **ppunkVal; | 
 |         IDispatch **ppdispVal; | 
 |         SAFEARRAY **pparray; | 
 |         LONGLONG *pllVal; | 
 |         ULONGLONG *pullVal; | 
 |         struct __tagBRECORD { | 
 |           PVOID pvRecord; | 
 |           IRecordInfo *pRecInfo; | 
 |         } __VARIANT_NAME_4; | 
 |       } __VARIANT_NAME_3; | 
 |     } __VARIANT_NAME_2; | 
 |  | 
 |     DECIMAL decVal; | 
 |   } __VARIANT_NAME_1; | 
 | }; | 
 |  | 
 | typedef VARIANT *LPVARIANT; | 
 | typedef VARIANT VARIANTARG; | 
 | typedef VARIANTARG *LPVARIANTARG; | 
 |  | 
 | struct _wireBRECORD { | 
 |   ULONG fFlags; | 
 |   ULONG clSize; | 
 |   IRecordInfo *pRecInfo; | 
 |   [size_is(clSize)] byte *pRecord; | 
 | }; | 
 |  | 
 | struct _wireVARIANT { | 
 |   DWORD clSize; | 
 |   DWORD rpcReserved; | 
 |   USHORT vt; | 
 |   USHORT wReserved1; | 
 |   USHORT wReserved2; | 
 |   USHORT wReserved3; | 
 |   [switch_is(vt)] union { | 
 |   [case(VT_EMPTY, VT_NULL)]    ; | 
 |   [case(VT_I1)]                signed char cVal; | 
 |   [case(VT_UI2)]               USHORT uiVal; | 
 |   [case(VT_UI4)]               ULONG ulVal; | 
 |   [case(VT_INT)]               INT intVal; | 
 |   [case(VT_UINT)]              UINT uintVal; | 
 |   [case(VT_UI1)]               BYTE bVal; | 
 |   [case(VT_I2)]                SHORT iVal; | 
 |   [case(VT_I4)]                LONG lVal; | 
 |   [case(VT_R4)]                FLOAT fltVal; | 
 |   [case(VT_R8)]                DOUBLE dblVal; | 
 |   [case(VT_BOOL)]              VARIANT_BOOL boolVal; | 
 |   [case(VT_ERROR)]             SCODE scode; | 
 |   [case(VT_DATE)]              DATE date; | 
 |   [case(VT_BSTR)]              wireBSTR bstrVal; | 
 |   [case(VT_CY)]                CY cyVal; | 
 |   [case(VT_DECIMAL)]           DECIMAL decVal; | 
 |   [case(VT_UNKNOWN)]           IUnknown *punkVal; | 
 |   [case(VT_DISPATCH)]          IDispatch *pdispVal; | 
 |   [case(VT_ARRAY)]             wireSAFEARRAY parray; | 
 |   [case(VT_I1|VT_BYREF)]       signed char *pcVal; | 
 |   [case(VT_UI2|VT_BYREF)]      USHORT *puiVal; | 
 |   [case(VT_UI4|VT_BYREF)]      ULONG *pulVal; | 
 |   [case(VT_INT|VT_BYREF)]      INT *pintVal; | 
 |   [case(VT_UINT|VT_BYREF)]     UINT *puintVal; | 
 |   [case(VT_UI1|VT_BYREF)]      BYTE *pbVal; | 
 |   [case(VT_I2|VT_BYREF)]       SHORT *piVal; | 
 |   [case(VT_I4|VT_BYREF)]       LONG *plVal; | 
 |   [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_DATE|VT_BYREF)]     DATE *pdate; | 
 |   [case(VT_BSTR|VT_BYREF)]     wireBSTR *pbstrVal; | 
 |   [case(VT_VARIANT|VT_BYREF)]  wireVARIANT *pvarVal; | 
 |   [case(VT_CY|VT_BYREF)]       CY *pcyVal; | 
 |   [case(VT_DECIMAL|VT_BYREF)]  DECIMAL *pdecVal; | 
 |   [case(VT_UNKNOWN|VT_BYREF)]  IUnknown **ppunkVal; | 
 |   [case(VT_DISPATCH|VT_BYREF)] IDispatch **ppdispVal; | 
 |   [case(VT_ARRAY|VT_BYREF)]    wireSAFEARRAY *pparray; | 
 |   [case(VT_RECORD, VT_RECORD|VT_BYREF)] wireBRECORD brecVal; | 
 |   }; | 
 | }; | 
 |  | 
 | /* Dispatch */ | 
 |  | 
 | typedef LONG DISPID; | 
 | typedef DWORD HREFTYPE; | 
 | typedef DISPID MEMBERID; | 
 |  | 
 | 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_is(vt)] union { | 
 |   [case(VT_PTR, VT_SAFEARRAY)] struct tagTYPEDESC *lptdesc; | 
 |   [case(VT_CARRAY)]            struct tagARRAYDESC *lpadesc; | 
 |   [case(VT_USERDEFINED)]       HREFTYPE hreftype; | 
 |   [default]                    ; | 
 |   }; | 
 |   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         = 0x00; | 
 | const USHORT PARAMFLAG_FIN          = 0x01; | 
 | const USHORT PARAMFLAG_FOUT         = 0x02; | 
 | const USHORT PARAMFLAG_FLCID        = 0x04; | 
 | const USHORT PARAMFLAG_FRETVAL      = 0x08; | 
 | const USHORT PARAMFLAG_FOPT         = 0x10; | 
 | const USHORT PARAMFLAG_FHASDEFAULT  = 0x20; | 
 | const USHORT PARAMFLAG_FHASCUSTDATA = 0x40; | 
 |  | 
 | typedef struct tagIDLDESC { | 
 |   ULONG 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") /* for IDL only */ | 
 | typedef struct tagELEMDESC { | 
 |   TYPEDESC tdesc; | 
 |   PARAMDESC paramdesc; | 
 | } ELEMDESC; | 
 | cpp_quote("#else") /* C/C++ defs */ | 
 | cpp_quote("typedef struct tagELEMDESC {") | 
 | cpp_quote("  TYPEDESC tdesc;") | 
 | cpp_quote("  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") /* for IDL only */ | 
 | typedef struct tagEXCEPINFO { | 
 |   WORD wCode; | 
 |   WORD wReserved; | 
 |   BSTR bstrSource; | 
 |   BSTR bstrDescription; | 
 |   BSTR bstrHelpFile; | 
 |   DWORD dwHelpContext; | 
 |   ULONG pvReserved; | 
 |   ULONG 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 (__stdcall *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, | 
 |   CC_PASCAL = CC_MSCPASCAL, | 
 |   CC_MACPASCAL, | 
 |   CC_STDCALL, | 
 |   CC_FPFASTCALL, | 
 |   CC_SYSCALL, | 
 |   CC_MPWCDECL, | 
 |   CC_MPWPASCAL, | 
 |   CC_MAX | 
 | } 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_is(varkind)] union { | 
 |   [case(VAR_PERINSTANCE, VAR_DISPATCH, VAR_STATIC)] ULONG oInst; | 
 |   [case(VAR_CONST)] VARIANT *lpvarValue; | 
 |   }; | 
 |   ELEMDESC elemdescVar; | 
 |   WORD wVarFlags; | 
 |   VARKIND varkind; | 
 | } VARDESC, *LPVARDESC; | 
 |  | 
 | typedef enum tagTYPEFLAGS { | 
 |   TYPEFLAG_FAPPOBJECT     = 0x0001, | 
 |   TYPEFLAG_FCANCREATE     = 0x0002, | 
 |   TYPEFLAG_FLICENSED      = 0x0004, | 
 |   TYPEFLAG_FPREDECLID     = 0x0008, | 
 |   TYPEFLAG_FHIDDEN        = 0x0010, | 
 |   TYPEFLAG_FCONTROL       = 0x0020, | 
 |   TYPEFLAG_FDUAL          = 0x0040, | 
 |   TYPEFLAG_FNONEXTENSIBLE = 0x0080, | 
 |   TYPEFLAG_FOLEAUTOMATION = 0x0100, | 
 |   TYPEFLAG_FRESTRICTED    = 0x0200, | 
 |   TYPEFLAG_FAGGREGATABLE  = 0x0400, | 
 |   TYPEFLAG_FREPLACEABLE   = 0x0800, | 
 |   TYPEFLAG_FDISPATCHABLE  = 0x1000, | 
 |   TYPEFLAG_FREVERSEBIND   = 0x2000, | 
 |   TYPEFLAG_FPROXY         = 0x4000 | 
 | } TYPEFLAGS; | 
 |  | 
 | typedef enum tagFUNCFLAGS { | 
 |   FUNCFLAG_FRESTRICTED       = 0x0001, | 
 |   FUNCFLAG_FSOURCE           = 0x0002, | 
 |   FUNCFLAG_FBINDABLE         = 0x0004, | 
 |   FUNCFLAG_FREQUESTEDIT      = 0x0008, | 
 |   FUNCFLAG_FDISPLAYBIND      = 0x0010, | 
 |   FUNCFLAG_FDEFAULTBIND      = 0x0020, | 
 |   FUNCFLAG_FHIDDEN           = 0x0040, | 
 |   FUNCFLAG_FUSESGETLASTERROR = 0x0080, | 
 |   FUNCFLAG_FDEFAULTCOLLELEM  = 0x0100, | 
 |   FUNCFLAG_FUIDEFAULT        = 0x0200, | 
 |   FUNCFLAG_FNONBROWSABLE     = 0x0400, | 
 |   FUNCFLAG_FREPLACEABLE      = 0x0800, | 
 |   FUNCFLAG_FIMMEDIATEBIND    = 0x1000 | 
 | } FUNCFLAGS; | 
 |  | 
 | typedef enum tagVARFLAGS { | 
 |   VARFLAG_FREADONLY        = 0x0001, | 
 |   VARFLAG_FSOURCE          = 0x0002, | 
 |   VARFLAG_FBINDABLE        = 0x0004, | 
 |   VARFLAG_FREQUESTEDIT     = 0x0008, | 
 |   VARFLAG_FDISPLAYBIND     = 0x0010, | 
 |   VARFLAG_FDEFAULTBIND     = 0x0020, | 
 |   VARFLAG_FHIDDEN          = 0x0040, | 
 |   VARFLAG_FRESTRICTED      = 0x0080, | 
 |   VARFLAG_FDEFAULTCOLLELEM = 0x0100, | 
 |   VARFLAG_FUIDEFAULT       = 0x0200, | 
 |   VARFLAG_FNONBROWSABLE    = 0x0400, | 
 |   VARFLAG_FREPLACEABLE     = 0x0800, | 
 |   VARFLAG_FIMMEDIATEBIND   = 0x1000 | 
 | } VARFLAGS; | 
 |  | 
 | typedef [wire_marshal(DWORD)] struct tagCLEANLOCALSTORAGE { | 
 |   IUnknown *pInterface; | 
 |   PVOID pStorage; | 
 |   DWORD flags; | 
 | } CLEANLOCALSTORAGE; | 
 |  | 
 | typedef struct tagCUSTDATAITEM { | 
 |   GUID guid; | 
 |   VARIANTARG varValue; | 
 | } CUSTDATAITEM, *LPCUSTDATAITEM; | 
 |  | 
 | typedef struct tagCUSTDATA { | 
 |   DWORD cCustData; | 
 |   [size_is(cCustData)] LPCUSTDATAITEM prgCustData; | 
 | } CUSTDATA, *LPCUSTDATA; | 
 |  | 
 | } /* interface IOleAutomationTypes */ | 
 |  | 
 | /******************** INTERFACES ********************/ | 
 |  | 
 | [ | 
 |   object, | 
 |   uuid(00020400-0000-0000-C000-000000000046), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface IDispatch : IUnknown | 
 | { | 
 |   typedef [unique] IDispatch *LPDISPATCH; | 
 |  | 
 |   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; | 
 |  | 
 |   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] 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); | 
 | } | 
 |  | 
 | [ | 
 |   object, | 
 |   uuid(00020404-0000-0000-C000-000000000046), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface IEnumVARIANT : IUnknown | 
 | { | 
 |   typedef [unique] IEnumVARIANT *LPENUMVARIANT; | 
 |  | 
 |   [local] | 
 |   HRESULT Next( | 
 |     [in] ULONG celt, | 
 |     [out] VARIANT *rgVar, | 
 |     [out] ULONG *pCeltFetched); | 
 |  | 
 |   [call_as(Next)] | 
 |   HRESULT RemoteNext( | 
 |     [in] ULONG celt, | 
 |     [out, size_is(celt), length_is(*pCeltFetched)] | 
 |     VARIANT *rgVar, | 
 |     [out] ULONG *pCeltFetched); | 
 |  | 
 |   HRESULT Skip( | 
 |     [in] ULONG celt); | 
 |  | 
 |   HRESULT Reset(); | 
 |  | 
 |   HRESULT Clone( | 
 |     [out] IEnumVARIANT **ppEnum); | 
 | } | 
 |  | 
 | [ | 
 |   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(); | 
 | } | 
 |  | 
 | [ | 
 |   object, | 
 |   uuid(00020412-0000-0000-C000-000000000046), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface ITypeInfo2 : ITypeInfo | 
 | { | 
 |   typedef [unique] ITypeInfo2 *LPTYPEINFO2; | 
 |  | 
 |   HRESULT GetTypeKind( | 
 |     [out] TYPEKIND *pTypeKind); | 
 |  | 
 |   HRESULT GetTypeFlags( | 
 |     [out] ULONG *pTypeFlags); | 
 |  | 
 |   HRESULT GetFuncIndexOfMemId( | 
 |     [in] MEMBERID memid, | 
 |     [in] INVOKEKIND invKind, | 
 |     [out] UINT *pFuncIndex); | 
 |  | 
 |   HRESULT GetVarIndexOfMemId( | 
 |     [in] MEMBERID memid, | 
 |     [out] UINT *pVarIndex); | 
 |  | 
 |   HRESULT GetCustData( | 
 |     [in] REFGUID guid, | 
 |     [out] VARIANT *pVarVal); | 
 |  | 
 |   HRESULT GetFuncCustData( | 
 |     [in] UINT index, | 
 |     [in] REFGUID guid, | 
 |     [out] VARIANT *pVarVal); | 
 |  | 
 |   HRESULT GetParamCustData( | 
 |     [in] UINT indexFunc, | 
 |     [in] UINT indexParam, | 
 |     [in] REFGUID guid, | 
 |     [out] VARIANT *pVarVal); | 
 |  | 
 |   HRESULT GetVarCustData( | 
 |     [in] UINT index, | 
 |     [in] REFGUID guid, | 
 |     [out] VARIANT *pVarVal); | 
 |  | 
 |   HRESULT GetImplTypeCustData( | 
 |     [in] UINT index, | 
 |     [in] REFGUID guid, | 
 |     [out] VARIANT *pVarVal); | 
 |  | 
 |   [local] | 
 |   HRESULT GetDocumentation2( | 
 |     [in] MEMBERID memid, | 
 |     [in] LCID lcid, | 
 |     [out] BSTR *pbstrHelpString, | 
 |     [out] DWORD *pdwHelpStringContext, | 
 |     [out] BSTR *pbstrHelpStringDll); | 
 |  | 
 |   [call_as(GetDocumentation2)] | 
 |   HRESULT RemoteGetDocumentation2( | 
 |     [in] MEMBERID memid, | 
 |     [in] LCID lcid, | 
 |     [in] DWORD refPtrFlags, | 
 |     [out] BSTR *pbstrHelpString, | 
 |     [out] DWORD *pdwHelpStringContext, | 
 |     [out] BSTR *pbstrHelpStringDll); | 
 |  | 
 |   HRESULT GetAllCustData( | 
 |     [out] CUSTDATA *pCustData); | 
 |  | 
 |   HRESULT GetAllFuncCustData( | 
 |     [in] UINT index, | 
 |     [out] CUSTDATA *pCustData); | 
 |  | 
 |   HRESULT GetAllParamCustData( | 
 |     [in] UINT indexFunc, | 
 |     [in] UINT indexParam, | 
 |     [out] CUSTDATA *pCustData); | 
 |  | 
 |   HRESULT GetAllVarCustData( | 
 |     [in] UINT index, | 
 |     [out] CUSTDATA *pCustData); | 
 |  | 
 |   HRESULT GetAllImplTypeCustData( | 
 |     [in] UINT index, | 
 |     [out] CUSTDATA *pCustData); | 
 | } | 
 |  | 
 | [ | 
 |   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 | 
 |   } 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(); | 
 | } | 
 |  | 
 | [ | 
 |   object, | 
 |   uuid(00020411-0000-0000-C000-000000000046), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface ITypeLib2 : ITypeLib | 
 | { | 
 |   typedef [unique] ITypeLib2 *LPTYPELIB2; | 
 |  | 
 |   HRESULT GetCustData( | 
 |     [in] REFGUID guid, | 
 |     [out] VARIANT *pVarVal); | 
 |  | 
 |   [local] | 
 |   HRESULT GetLibStatistics( | 
 |     [out] ULONG *pcUniqueNames, | 
 |     [out] ULONG *pcchUniqueNames); | 
 |  | 
 |   [call_as(GetLibStatistics)] | 
 |   HRESULT RemoteGetLibStatistics( | 
 |     [out] ULONG *pcUniqueNames, | 
 |     [out] ULONG *pcchUniqueNames); | 
 |  | 
 |   [local] | 
 |   HRESULT GetDocumentation2( | 
 |     [in] INT index, | 
 |     [in] LCID lcid, | 
 |     [out] BSTR *pbstrHelpString, | 
 |     [out] DWORD *pdwHelpStringContext, | 
 |     [out] BSTR *pbstrHelpStringDll); | 
 |  | 
 |   [call_as(GetDocumentation2)] | 
 |   HRESULT RemoteGetDocumentation2( | 
 |     [in] INT index, | 
 |     [in] LCID lcid, | 
 |     [in] DWORD refPtrFlags, | 
 |     [out] BSTR *pbstrHelpString, | 
 |     [out] DWORD *pdwHelpStringContext, | 
 |     [out] BSTR *pbstrHelpStringDll); | 
 |  | 
 |   HRESULT GetAllCustData( | 
 |     [out] CUSTDATA *pCustData); | 
 | } | 
 |  | 
 | [ | 
 |   local, | 
 |   object, | 
 |   uuid(00020410-0000-0000-C000-000000000046), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface ITypeChangeEvents : IUnknown | 
 | { | 
 |   typedef [unique] ITypeChangeEvents *LPTYPECHANGEEVENTS; | 
 |  | 
 |   typedef enum tagCHANGEKIND { | 
 |     CHANGEKIND_ADDMEMBER, | 
 |     CHANGEKIND_DELETEMEMBER, | 
 |     CHANGEKIND_SETNAMES, | 
 |     CHANGEKIND_SETDOCUMENTATION, | 
 |     CHANGEKIND_GENERAL, | 
 |     CHANGEKIND_INVALIDATE, | 
 |     CHANGEKIND_CHANGEFAILED, | 
 |     CHANGEKIND_MAX | 
 |   } CHANGEKIND; | 
 |  | 
 |   HRESULT RequestTypeChange( | 
 |     [in] CHANGEKIND changeKind, | 
 |     [in] ITypeInfo *pTInfoBefore, | 
 |     [in] LPOLESTR pStrName, | 
 |     [out] INT *pfCancel); | 
 |    | 
 |   HRESULT AfterTypeChange( | 
 |     [in] CHANGEKIND changeKind, | 
 |     [in] ITypeInfo *pTInfoAfter, | 
 |     [in] LPOLESTR pStrName); | 
 | } | 
 |  | 
 | [ | 
 |   object, | 
 |   uuid(1CF2B120-547D-101B-8E65-08002B2BD119), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface IErrorInfo : IUnknown | 
 | { | 
 |   typedef [unique] IErrorInfo *LPERRORINFO; | 
 |  | 
 |   HRESULT GetGUID( | 
 |     [out] GUID *pGUID); | 
 |  | 
 |   HRESULT GetSource( | 
 |     [out] BSTR *pBstrSource); | 
 |  | 
 |   HRESULT GetDescription( | 
 |     [out] BSTR *pBstrDescription); | 
 |  | 
 |   HRESULT GetHelpFile( | 
 |     [out] BSTR *pBstrHelpFile); | 
 |  | 
 |   HRESULT GetHelpContext( | 
 |     [out] DWORD *pdwHelpContext); | 
 | } | 
 |  | 
 | [ | 
 |   object, | 
 |   uuid(22F03340-547D-101B-8E65-08002B2BD119), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface ICreateErrorInfo : IUnknown | 
 | { | 
 |   typedef [unique] ICreateErrorInfo *LPCREATEERRORINFO; | 
 |  | 
 |   HRESULT SetGUID( | 
 |     [in] REFGUID rguid); | 
 |  | 
 |   HRESULT SetSource( | 
 |     [in] LPOLESTR szSource); | 
 |  | 
 |   HRESULT SetDescription( | 
 |     [in] LPOLESTR szDescription); | 
 |  | 
 |   HRESULT SetHelpFile( | 
 |     [in] LPOLESTR szHelpFile); | 
 |  | 
 |   HRESULT SetHelpContext( | 
 |     [in] DWORD dwHelpContext); | 
 | } | 
 |  | 
 | [ | 
 |   object, | 
 |   uuid(DF0B3D60-548F-101B-8E65-08002B2BD119), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface ISupportErrorInfo : IUnknown | 
 | { | 
 |   typedef [unique] ISupportErrorInfo *LPSUPPORTERRORINFO; | 
 |  | 
 |   HRESULT InterfaceSupportsErrorInfo( | 
 |     [in] REFIID riid); | 
 | } | 
 |  | 
 | [ | 
 |   object, | 
 |   uuid(0000002E-0000-0000-C000-000000000046) | 
 | ] | 
 | interface ITypeFactory : IUnknown | 
 | { | 
 |   HRESULT CreateFromTypeInfo( | 
 |     [in] ITypeInfo *pTypeInfo, | 
 |     [in] REFIID riid, | 
 |     [out, iid_is(riid)] IUnknown **ppv); | 
 | } | 
 |  | 
 | [ | 
 |   local, | 
 |   object, | 
 |   uuid(0000002D-0000-0000-C000-000000000046) | 
 | ] | 
 | interface ITypeMarshal : IUnknown | 
 | { | 
 |   HRESULT Size( | 
 |     [in] PVOID pvType, | 
 |     [in] DWORD dwDestContext, | 
 |     [in] PVOID pvDestContext, | 
 |     [out] ULONG *pSize); | 
 |  | 
 |   HRESULT Marshal( | 
 |     [in] PVOID pvType, | 
 |     [in] DWORD dwDestContext, | 
 |     [in] PVOID pvDestContext, | 
 |     [in] ULONG cbBufferLength, | 
 |     [out] BYTE *pBuffer, | 
 |     [out] ULONG *pcbWritten); | 
 |  | 
 |   HRESULT Unmarshal( | 
 |     [out] PVOID pvType, | 
 |     [in] DWORD dwFlags, | 
 |     [in] ULONG cbBufferLength, | 
 |     [in] BYTE *pBuffer, | 
 |     [out] ULONG *pcbRead); | 
 |  | 
 |   HRESULT Free( | 
 |     [in] PVOID pvType); | 
 | } | 
 |  | 
 | [ | 
 |   local, | 
 |   object, | 
 |   uuid(0000002F-0000-0000-C000-000000000046) | 
 | ] | 
 | interface IRecordInfo : IUnknown | 
 | { | 
 |   typedef [unique] IRecordInfo *LPRECORDINFO; | 
 |  | 
 |   HRESULT RecordInit( | 
 |     [out] PVOID pvNew); | 
 |  | 
 |   HRESULT RecordClear( | 
 |     [in] PVOID pvExisting); | 
 |  | 
 |   HRESULT RecordCopy( | 
 |     [in] PVOID pvExisting, | 
 |     [out] PVOID pvNew); | 
 |  | 
 |   HRESULT GetGuid( | 
 |     [out] GUID *pguid); | 
 |  | 
 |   HRESULT GetName( | 
 |     [out] BSTR *pbstrName); | 
 |  | 
 |   HRESULT GetSize( | 
 |     [out] ULONG *pcbSize); | 
 |  | 
 |   HRESULT GetTypeInfo( | 
 |     [out] ITypeInfo **ppTypeInfo); | 
 |  | 
 |   HRESULT GetField( | 
 |     [in] PVOID pvData, | 
 |     [in] LPCOLESTR szFieldName, | 
 |     [out] VARIANT *pvarField); | 
 |  | 
 |   HRESULT GetFieldNoCopy( | 
 |     [in] PVOID pvData, | 
 |     [in] LPCOLESTR szFieldName, | 
 |     [out] VARIANT *pvarField, | 
 |     [out] PVOID *ppvDataCArray); | 
 |  | 
 |   HRESULT PutField( | 
 |     [in] ULONG wFlags, | 
 |     [in, out] PVOID pvData, | 
 |     [in] LPCOLESTR szFieldName, | 
 |     [in] VARIANT *pvarField); | 
 |  | 
 |   HRESULT PutFieldNoCopy( | 
 |     [in] ULONG wFlags, | 
 |     [in, out] PVOID pvData, | 
 |     [in] LPCOLESTR szFieldName, | 
 |     [in] VARIANT *pvarField); | 
 |  | 
 |   HRESULT GetFieldNames( | 
 |     [in, out] ULONG *pcNames, | 
 |     [out, size_is(*pcNames), length_is(*pcNames)] BSTR *rgBstrNames); | 
 |  | 
 |   BOOL IsMatchingType( | 
 |     [in] IRecordInfo *pRecordInfo); | 
 |  | 
 |   PVOID RecordCreate(); | 
 |  | 
 |   HRESULT RecordCreateCopy( | 
 |     [in] PVOID pvSource, | 
 |     [out] PVOID *ppvDest); | 
 |  | 
 |   HRESULT RecordDestroy( | 
 |     [in] PVOID pvRecord); | 
 | } | 
 |  | 
 | [ | 
 |   local, | 
 |   object, | 
 |   uuid(00020405-0000-0000-C000-000000000046), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface ICreateTypeInfo : IUnknown | 
 | { | 
 |   typedef [unique] ICreateTypeInfo *LPCREATETYPEINFO; | 
 |  | 
 |   HRESULT SetGuid( | 
 |     [in] REFGUID guid); | 
 |  | 
 |   HRESULT SetTypeFlags( | 
 |     [in] UINT uTypeFlags); | 
 |  | 
 |   HRESULT SetDocString( | 
 |     [in] LPOLESTR pStrDoc); | 
 |  | 
 |   HRESULT SetHelpContext( | 
 |     [in] DWORD dwHelpContext); | 
 |  | 
 |   HRESULT SetVersion( | 
 |     [in] WORD wMajorVerNum, | 
 |     [in] WORD wMinorVerNum); | 
 |  | 
 |   HRESULT AddRefTypeInfo( | 
 |     [in] ITypeInfo *pTInfo, | 
 |     [in] HREFTYPE *phRefType); | 
 |  | 
 |   HRESULT AddFuncDesc( | 
 |     [in] UINT index, | 
 |     [in] FUNCDESC *pFuncDesc); | 
 |  | 
 |   HRESULT AddImplType( | 
 |     [in] UINT index, | 
 |     [in] HREFTYPE hRefType); | 
 |  | 
 |   HRESULT SetImplTypeFlags( | 
 |     [in] UINT index, | 
 |     [in] INT implTypeFlags); | 
 |  | 
 |   HRESULT SetAlignment( | 
 |     [in] WORD cbAlignment); | 
 |  | 
 |   HRESULT SetSchema( | 
 |     [in] LPOLESTR pStrSchema); | 
 |  | 
 |   HRESULT AddVarDesc( | 
 |     [in] UINT index, | 
 |     [in] VARDESC *pVarDesc); | 
 |  | 
 |   HRESULT SetFuncAndParamNames( | 
 |     [in] UINT index, | 
 |     [in, size_is(cNames)] LPOLESTR *rgszNames, | 
 |     [in] UINT cNames); | 
 |  | 
 |   HRESULT SetVarName( | 
 |     [in] UINT index, | 
 |     [in] LPOLESTR szName); | 
 |  | 
 |   HRESULT SetTypeDescAlias( | 
 |     [in] TYPEDESC *pTDescAlias); | 
 |  | 
 |   HRESULT DefineFuncAsDllEntry( | 
 |     [in] UINT index, | 
 |     [in] LPOLESTR szDllName, | 
 |     [in] LPOLESTR szProcName); | 
 |  | 
 |   HRESULT SetFuncDocString( | 
 |     [in] UINT index, | 
 |     [in] LPOLESTR szDocString); | 
 |  | 
 |   HRESULT SetVarDocString( | 
 |     [in] UINT index, | 
 |     [in] LPOLESTR szDocString); | 
 |  | 
 |   HRESULT SetFuncHelpContext( | 
 |     [in] UINT index, | 
 |     [in] DWORD dwHelpContext); | 
 |  | 
 |   HRESULT SetVarHelpContext( | 
 |     [in] UINT index, | 
 |     [in] DWORD dwHelpContext); | 
 |  | 
 |   HRESULT SetMops( | 
 |     [in] UINT index, | 
 |     [in] BSTR bstrMops); | 
 |  | 
 |   HRESULT SetTypeIdldesc( | 
 |     [in] IDLDESC * pIdlDesc); | 
 |  | 
 |   HRESULT LayOut(); | 
 | } | 
 |  | 
 | [ | 
 |   local, | 
 |   object, | 
 |   uuid(0002040E-0000-0000-C000-000000000046), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface ICreateTypeInfo2 : ICreateTypeInfo | 
 | { | 
 |   typedef [unique] ICreateTypeInfo2 *LPCREATETYPEINFO2; | 
 |  | 
 |   HRESULT DeleteFuncDesc( | 
 |     [in] UINT index); | 
 |  | 
 |   HRESULT DeleteFuncDescByMemId( | 
 |     [in] MEMBERID memid, | 
 |     [in] INVOKEKIND invKind); | 
 |  | 
 |   HRESULT DeleteVarDesc( | 
 |     [in] UINT index); | 
 |  | 
 |   HRESULT DeleteVarDescByMemId( | 
 |     [in] MEMBERID memid); | 
 |  | 
 |   HRESULT DeleteImplType( | 
 |     [in] UINT index); | 
 |  | 
 |   HRESULT SetCustData( | 
 |     [in] REFGUID guid, | 
 |     [in] VARIANT *pVarVal); | 
 |  | 
 |   HRESULT SetFuncCustData(  | 
 |     [in] UINT index,  | 
 |     [in] REFGUID guid,  | 
 |     [in] VARIANT *pVarVal); | 
 |    | 
 |   HRESULT SetParamCustData(  | 
 |     [in] UINT indexFunc,  | 
 |     [in] UINT indexParam,  | 
 |     [in] REFGUID guid,  | 
 |     [in] VARIANT *pVarVal); | 
 |  | 
 |   HRESULT SetVarCustData(  | 
 |     [in] UINT index,  | 
 |     [in] REFGUID guid,  | 
 |     [in] VARIANT *pVarVal); | 
 |  | 
 |   HRESULT SetImplTypeCustData(  | 
 |     [in] UINT index,  | 
 |     [in] REFGUID guid,  | 
 |     [in] VARIANT *pVarVal); | 
 |  | 
 |   HRESULT SetHelpStringContext( | 
 |     [in] ULONG dwHelpStringContext); | 
 |  | 
 |   HRESULT SetFuncHelpStringContext( | 
 |     [in] UINT index, | 
 |     [in] ULONG dwHelpStringContext); | 
 |  | 
 |   HRESULT SetVarHelpStringContext( | 
 |     [in] UINT index, | 
 |     [in] ULONG dwHelpStringContext); | 
 |  | 
 |   HRESULT Invalidate(); | 
 |  | 
 |   HRESULT SetName( | 
 |     [in] LPOLESTR szName); | 
 | } | 
 |  | 
 | [ | 
 |   local, | 
 |   object, | 
 |   uuid(00020406-0000-0000-C000-000000000046), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface ICreateTypeLib : IUnknown | 
 | { | 
 |   typedef [unique] ICreateTypeLib *LPCREATETYPELIB; | 
 |  | 
 |   HRESULT CreateTypeInfo( | 
 |     [in] LPOLESTR szName, | 
 |     [in] TYPEKIND tkind, | 
 |     [out] ICreateTypeInfo **ppCTInfo); | 
 |  | 
 |   HRESULT SetName( | 
 |     [in] LPOLESTR szName); | 
 |  | 
 |   HRESULT SetVersion( | 
 |     [in] WORD wMajorVerNum, | 
 |     [in] WORD wMinorVerNum); | 
 |  | 
 |   HRESULT SetGuid( | 
 |     [in] REFGUID guid); | 
 |  | 
 |   HRESULT SetDocString( | 
 |     [in] LPOLESTR szDoc); | 
 |  | 
 |   HRESULT SetHelpFileName( | 
 |     [in] LPOLESTR szHelpFileName); | 
 |  | 
 |   HRESULT SetHelpContext( | 
 |     [in] DWORD dwHelpContext); | 
 |  | 
 |   HRESULT SetLcid( | 
 |     [in] LCID lcid); | 
 |  | 
 |   HRESULT SetLibFlags( | 
 |     [in] UINT uLibFlags); | 
 |  | 
 |   HRESULT SaveAllChanges(); | 
 | } | 
 |  | 
 | [ | 
 |   local, | 
 |   object, | 
 |   uuid(0002040F-0000-0000-C000-000000000046), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface ICreateTypeLib2 : ICreateTypeLib | 
 | { | 
 |   typedef [unique] ICreateTypeLib2 *LPCREATETYPELIB2; | 
 |  | 
 |   HRESULT DeleteTypeInfo( | 
 |     [in] LPOLESTR szName); | 
 |  | 
 |   HRESULT SetCustData( | 
 |     [in] REFGUID guid, | 
 |     [in] VARIANT *pVarVal); | 
 |  | 
 |   HRESULT SetHelpStringContext( | 
 |     [in] ULONG dwHelpStringContext); | 
 |  | 
 |   HRESULT SetHelpStringDll( | 
 |     [in] LPOLESTR szFileName); | 
 | } | 
 |  | 
 |  | 
 | /***************************************************************************** | 
 |  * IErrorLog interface | 
 |  */ | 
 | [ | 
 |   object, | 
 |   uuid(3127ca40-446e-11ce-8135-00aa004bb851), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface IErrorLog : IUnknown | 
 | { | 
 |   typedef IErrorLog *LPERRORLOG; | 
 |  | 
 |   HRESULT AddError( | 
 |     [in] LPCOLESTR pszPropName, | 
 |     [in] EXCEPINFO *pExcepInfo); | 
 | } | 
 |  | 
 |  | 
 | /***************************************************************************** | 
 |  * IPropertyBag interface | 
 |  */ | 
 | [ | 
 |   object, | 
 |   uuid(55272a00-42cb-11ce-8135-00aa004bb851), | 
 |   pointer_default(unique) | 
 | ] | 
 | interface IPropertyBag : IUnknown | 
 | { | 
 |   typedef IPropertyBag *LPPROPERTYBAG; | 
 |  | 
 |   [local] | 
 |   HRESULT Read( | 
 |     [in] LPCOLESTR pszPropName, | 
 |     [in, out] VARIANT *pVar, | 
 |     [in] IErrorLog *pErrorLog); | 
 |  | 
 |   [call_as(Read)] | 
 |   HRESULT RemoteRead( | 
 |     [in] LPCOLESTR pszPropName, | 
 |     [out] VARIANT *pVar, | 
 |     [in] IErrorLog *pErrorLog, | 
 |     [in] DWORD varType, | 
 |     [in] IUnknown *pUnkObj); | 
 |  | 
 |   HRESULT Write( | 
 |     [in] LPCOLESTR pszPropName, | 
 |     [in] VARIANT *pVar); | 
 | } |