Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
For ease of implementation, the full IDL is provided where "ms-dcom.idl" is the IDL specified in [MS-DCOM] Appendix A.
-
import "ms-dtyp.idl"; import "ms-dcom.idl"; // Begin: Extra definitions // Use the next line in any IDL file that imports ms-oaut.idl // that makes use of SAFEARRAYs. // It is needed to bypass special assumptions MIDL compiler makes // about the SAFEARRAY type in windows environment. // #define SAFEARRAY(type) SAFEARRAY // basic type aliases typedef byte BYTE; typedef LONG SCODE; typedef IID *REFIID; typedef GUID *REFGUID; typedef [string] wchar_t *LPOLESTR; typedef [string] const wchar_t *LPCOLESTR; typedef [public] unsigned __int3264 ULONG_PTR, *PULONG_PTR; typedef void *PVOID, *LPVOID; // forward declarations interface IDispatch; interface ITypeLib; interface ITypeInfo; typedef [unique] SAFEARRAY * PSAFEARRAY, *LPSAFEARRAY; typedef [unique] struct _wireVARIANT * VARIANT; // End: Extra definitions typedef enum tagVARENUM { VT_EMPTY = 0x0000, VT_NULL = 0x0001, VT_I2 = 0x0002, VT_I4 = 0x0003, VT_R4 = 0x0004, VT_R8 = 0x0005, VT_CY = 0x0006, VT_DATE = 0x0007, VT_BSTR = 0x0008, VT_DISPATCH = 0x0009, VT_ERROR = 0x000A, VT_BOOL = 0x000B, VT_VARIANT = 0x000C, VT_UNKNOWN = 0x000D, VT_DECIMAL = 0x000E, VT_I1 = 0x0010, VT_UI1 = 0x0011, VT_UI2 = 0x0012, VT_UI4 = 0x0013, VT_I8 = 0x0014, VT_UI8 = 0x0015, VT_INT = 0x0016, VT_UINT = 0x0017, VT_VOID = 0x0018, VT_HRESULT = 0x0019, VT_PTR = 0x001A, VT_SAFEARRAY = 0x001B, VT_CARRAY = 0x001C, VT_USERDEFINED = 0x001D, VT_LPSTR = 0x001E, VT_LPWSTR = 0x001F, VT_RECORD = 0x0024, VT_INT_PTR = 0x0025, VT_UINT_PTR = 0x0026, VT_ARRAY = 0x2000, VT_BYREF = 0x4000 } VARENUM; typedef enum tagADVFEATUREFLAGS { FADF_AUTO = 0x0001, FADF_STATIC = 0x0002, FADF_EMBEDDED = 0x0004, FADF_FIXEDSIZE = 0x0010, FADF_RECORD = 0x0020, FADF_HAVEIID = 0x0040, FADF_HAVEVARTYPE = 0x0080, FADF_BSTR = 0x0100, FADF_UNKNOWN = 0x0200, FADF_DISPATCH = 0x0400, FADF_VARIANT = 0x0800 } ADVFEATUREFLAGS; 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|0x8000 } SF_TYPE; typedef [v1_enum] enum tagCALLCONV { CC_CDECL = 1, CC_PASCAL = 2, CC_STDCALL = 4 } CALLCONV; typedef enum tagFUNCFLAGS { FUNCFLAG_FRESTRICTED = 1, FUNCFLAG_FSOURCE = 0x2, FUNCFLAG_FBINDABLE = 0x4, FUNCFLAG_FREQUESTEDIT = 0x8, FUNCFLAG_FDISPLAYBIND = 0x10, FUNCFLAG_FDEFAULTBIND = 0x20, FUNCFLAG_FHIDDEN = 0x40, FUNCFLAG_FUSESGETLASTERROR = 0x80, FUNCFLAG_FDEFAULTCOLLELEM = 0x100, FUNCFLAG_FUIDEFAULT = 0x200, FUNCFLAG_FNONBROWSABLE = 0x400, FUNCFLAG_FREPLACEABLE = 0x800, FUNCFLAG_FIMMEDIATEBIND = 0x1000 } FUNCFLAGS; typedef [v1_enum] enum tagFUNCKIND { FUNC_PUREVIRTUAL = 1, FUNC_STATIC = 3, FUNC_DISPATCH = 4 } FUNCKIND; typedef enum tagIMPLTYPEFLAGS { IMPLTYPEFLAG_FDEFAULT = 0x1, IMPLTYPEFLAG_FSOURCE = 0x2, IMPLTYPEFLAG_FRESTRICTED = 0x4, IMPLTYPEFLAG_FDEFAULTVTABLE = 0x8 } IMPLTYPEFLAGS; typedef [v1_enum] enum tagINVOKEKIND { INVOKE_FUNC = 0x1, INVOKE_PROPERTYGET = 0x2, INVOKE_PROPERTYPUT = 0x4, INVOKE_PROPERTYPUTREF = 0x8 } INVOKEKIND; typedef enum tagPARAMFLAGS { PARAMFLAG_NONE = 0, PARAMFLAG_FIN = 0x1, PARAMFLAG_FOUT = 0x2, PARAMFLAG_FLCID = 0x4, PARAMFLAG_FRETVAL = 0x8, PARAMFLAG_FOPT = 0x10, PARAMFLAG_FHASDEFAULT = 0x20, PARAMFLAG_FHASCUSTDATA = 0x40 } PARAMFLAGS; typedef enum tagTYPEFLAGS { TYPEFLAG_FAPPOBJECT = 0x1, TYPEFLAG_FCANCREATE = 0x2, TYPEFLAG_FLICENSED = 0x4, TYPEFLAG_FPREDECLID = 0x8, TYPEFLAG_FHIDDEN = 0x10, TYPEFLAG_FCONTROL = 0x20, TYPEFLAG_FDUAL = 0x40, TYPEFLAG_FNONEXTENSIBLE = 0x80, TYPEFLAG_FOLEAUTOMATION = 0x100, TYPEFLAG_FRESTRICTED = 0x200, TYPEFLAG_FAGGREGATABLE = 0x400, TYPEFLAG_FREPLACEABLE = 0x800, TYPEFLAG_FDISPATCHABLE = 0x1000, TYPEFLAG_FPROXY = 0x4000 } TYPEFLAGS; typedef [v1_enum] enum tagTYPEKIND { TKIND_ENUM = 0x0, TKIND_RECORD = 0x1, TKIND_MODULE = 0x2, TKIND_INTERFACE = 0x3, TKIND_DISPATCH = 0x4, TKIND_COCLASS = 0x5, TKIND_ALIAS = 0x6, TKIND_UNION = 0x7 } TYPEKIND; typedef enum tagVARFLAGS { VARFLAG_FREADONLY = 0x1, VARFLAG_FSOURCE = 0x2, VARFLAG_FBINDABLE = 0x4, VARFLAG_FREQUESTEDIT = 0x8, VARFLAG_FDISPLAYBIND = 0x10, VARFLAG_FDEFAULTBIND = 0x20, VARFLAG_FHIDDEN = 0x40, VARFLAG_FRESTRICTED = 0x80, VARFLAG_FDEFAULTCOLLELEM = 0x100, VARFLAG_FUIDEFAULT = 0x200, VARFLAG_FNONBROWSABLE = 0x400, VARFLAG_FREPLACEABLE = 0x800, VARFLAG_FIMMEDIATEBIND = 0x1000 } VARFLAGS; typedef [v1_enum] enum tagVARKIND { VAR_PERINSTANCE = 0, VAR_STATIC = ( VAR_PERINSTANCE + 1 ), VAR_CONST = ( VAR_STATIC + 1 ), VAR_DISPATCH = ( VAR_CONST + 1 ) } VARKIND; typedef [v1_enum] enum tagLIBFLAGS { LIBFLAG_FRESTRICTED = 0x01, LIBFLAG_FCONTROL = 0x02, LIBFLAG_FHIDDEN = 0x04, LIBFLAG_FHASDISKIMAGE = 0x08 } LIBFLAGS; typedef [v1_enum] enum tagSYSKIND { SYS_WIN32 = 1, SYS_WIN64 = 3 } SYSKIND; typedef [v1_enum] enum tagDESCKIND { DESCKIND_NONE = 0, DESCKIND_FUNCDESC = 1, DESCKIND_VARDESC = 2, DESCKIND_TYPECOMP = 3, DESCKIND_IMPLICITAPPOBJ = 4 } DESCKIND; typedef struct _FLAGGED_WORD_BLOB { unsigned long cBytes; unsigned long clSize; [size_is(clSize)] unsigned short asData[]; } FLAGGED_WORD_BLOB; typedef [unique] FLAGGED_WORD_BLOB* BSTR; typedef struct tagCY { __int64 int64; } CURRENCY; typedef double DATE; typedef struct tagDEC { WORD wReserved; BYTE scale; BYTE sign; ULONG Hi32; ULONGLONG Lo64; } DECIMAL; typedef short VARIANT_BOOL; #define VARIANT_TRUE ((VARIANT_BOOL)0xffff) #define VARIANT_FALSE ((VARIANT_BOOL)0) typedef struct _wireBRECORD { ULONG fFlags; ULONG clSize; MInterfacePointer * pRecInfo; [size_is(clSize)] byte* pRecord; } wireBRECORDStr; typedef [unique] struct _wireBRECORD* BRECORD; typedef 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)] HRESULT scode; [case(VT_CY)] CURRENCY cyVal; [case(VT_DATE)] DATE date; [case(VT_BSTR)] BSTR bstrVal; [case(VT_UNKNOWN)] IUnknown* punkVal; [case(VT_DISPATCH)] IDispatch* pdispVal; [case(VT_ARRAY)] PSAFEARRAY parray; [case(VT_RECORD, VT_RECORD|VT_BYREF)] BRECORD 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)] HRESULT* pscode; [case(VT_CY|VT_BYREF)] CURRENCY* pcyVal; [case(VT_DATE|VT_BYREF)] DATE* pdate; [case(VT_BSTR|VT_BYREF)] BSTR* pbstrVal; [case(VT_UNKNOWN|VT_BYREF)] IUnknown** ppunkVal; [case(VT_DISPATCH|VT_BYREF)] IDispatch** ppdispVal; [case(VT_ARRAY|VT_BYREF)] PSAFEARRAY* pparray; [case(VT_VARIANT|VT_BYREF)] VARIANT* 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_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_DECIMAL|VT_BYREF)] DECIMAL* pdecVal; [case(VT_EMPTY)] ; /*nothing*/ [case(VT_NULL)] ; /*nothing*/ } _varUnion; } wireVARIANTStr; typedef struct tagSAFEARRAYBOUND { ULONG cElements; LONG lLbound; } SAFEARRAYBOUND, *LPSAFEARRAYBOUND; typedef struct _wireSAFEARR_BSTR { ULONG Size; [size_is(Size), ref] BSTR* 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] VARIANT* aVariant; } SAFEARR_VARIANT; typedef struct _wireSAFEARR_BRECORD { ULONG Size; [size_is(Size), ref] BRECORD* aRecord; } SAFEARR_BRECORD; typedef struct _wireSAFEARR_HAVEIID { ULONG Size; [size_is(Size), ref] IUnknown** apUnknown; IID iid; } SAFEARR_HAVEIID; typedef struct _BYTE_SIZEDARR { unsigned long clSize; [size_is(clSize)] byte* pData; } BYTE_SIZEDARR; typedef struct _SHORT_SIZEDARR { unsigned long clSize; [size_is(clSize)] unsigned short* pData; } WORD_SIZEDARR; typedef struct _LONG_SIZEDARR { unsigned long clSize; [size_is(clSize)] unsigned long* pData; } DWORD_SIZEDARR; typedef struct _HYPER_SIZEDARR { unsigned long clSize; [size_is(clSize)] hyper* pData; } HYPER_SIZEDARR; typedef union _wireSAFEARRAY_UNION switch(unsigned long 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[]; } *SAFEARRAY; typedef struct tagRecordInfo { GUID libraryGuid; DWORD verMajor; GUID recGuid; DWORD verMinor; DWORD Lcid; } RecordInfo; typedef LONG DISPID; typedef struct tagDISPPARAMS { [size_is(cArgs)] VARIANT* rgvarg; [size_is(cNamedArgs)] DISPID* rgdispidNamedArgs; UINT cArgs; UINT cNamedArgs; } DISPPARAMS; typedef struct tagEXCEPINFO { WORD wCode; WORD wReserved; BSTR bstrSource; BSTR bstrDescription; BSTR bstrHelpFile; DWORD dwHelpContext; ULONG_PTR pvReserved; ULONG_PTR pfnDeferredFillIn; HRESULT scode; } EXCEPINFO; typedef DISPID MEMBERID; typedef DWORD HREFTYPE; typedef struct tagTYPEDESC { [switch_type(USHORT), switch_is(vt)] union { [case(VT_PTR, VT_SAFEARRAY)] struct tagTYPEDESC * lptdesc; [case(VT_CARRAY)] struct tagARRAYDESC * lpadesc; [case(VT_USERDEFINED)] HREFTYPE hreftype; [default] ; } _tdUnion; USHORT vt; } TYPEDESC; typedef struct tagARRAYDESC { TYPEDESC tdescElem; USHORT cDims; [size_is(cDims)] SAFEARRAYBOUND rgbounds[]; } ARRAYDESC; typedef struct tagPARAMDESCEX { ULONG cBytes; VARIANT varDefaultValue; } PARAMDESCEX; typedef struct tagPARAMDESC { PARAMDESCEX *pparamdescex; USHORT wParamFlags; } PARAMDESC; typedef struct tagELEMDESC { TYPEDESC tdesc; PARAMDESC paramdesc; } ELEMDESC; typedef struct tagFUNCDESC { MEMBERID memid; [size_is(cReserved2)] SCODE * lReserved1; [size_is(cParams)] ELEMDESC * lprgelemdescParam; FUNCKIND funckind; INVOKEKIND invkind; CALLCONV callconv; SHORT cParams; SHORT cParamsOpt; SHORT oVft; SHORT cReserved2; ELEMDESC elemdescFunc; WORD wFuncFlags; } FUNCDESC, *LPFUNCDESC; typedef struct tagVARDESC { MEMBERID memid; LPOLESTR lpstrReserved; [switch_type(VARKIND), switch_is(varkind)] union { [case(VAR_PERINSTANCE, VAR_DISPATCH, VAR_STATIC)] ULONG oInst; [case(VAR_CONST)] VARIANT * lpvarValue; } _vdUnion; ELEMDESC elemdescVar; WORD wVarFlags; VARKIND varkind; } VARDESC, *LPVARDESC; typedef struct tagTYPEATTR { GUID guid; LCID lcid; DWORD dwReserved1; DWORD dwReserved2; DWORD dwReserved3; LPOLESTR lpstrReserved4; ULONG cbSizeInstance; TYPEKIND typekind; WORD cFuncs; WORD cVars; WORD cImplTypes; WORD cbSizeVft; WORD cbAlignment; WORD wTypeFlags; WORD wMajorVerNum; WORD wMinorVerNum; TYPEDESC tdescAlias; DWORD dwReserved5; WORD wReserved6; } TYPEATTR, *LPTYPEATTR; typedef struct tagTLIBATTR { GUID guid; LCID lcid; SYSKIND syskind; unsigned short wMajorVerNum; unsigned short wMinorVerNum; unsigned short wLibFlags; } TLIBATTR, *LPTLIBATTR; typedef struct tagCUSTDATAITEM { GUID guid; VARIANT varValue; } CUSTDATAITEM; typedef struct tagCUSTDATA { DWORD cCustData; [size_is(cCustData)] CUSTDATAITEM * prgCustData; } CUSTDATA; [ 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 ); HRESULT Invoke( [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)] VARIANT * rgVarRef ); const DWORD DISPATCH_METHOD = 0x00000001; const DWORD DISPATCH_PROPERTYGET = 0x00000002; const DWORD DISPATCH_PROPERTYPUT = 0x00000004; const DWORD DISPATCH_PROPERTYPUTREF = 0x00000008; const DWORD DISPATCH_zeroVarResult = 0x00020000; const DWORD DISPATCH_zeroExcepInfo = 0x00040000; const DWORD DISPATCH_zeroArgErr = 0x00080000; const DISPID DISPID_VALUE = 0; const DISPID DISPID_UNKNOWN = -1; const DISPID DISPID_PROPERTYPUT = -3; const DISPID DISPID_NEWENUM = -4; } [ object, uuid(00020404-0000-0000-C000-000000000046), pointer_default(unique) ] interface IEnumVARIANT : IUnknown { HRESULT Next( [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 { HRESULT Bind( [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] DWORD * pReserved ); HRESULT BindType( [in] LPOLESTR szName, [in] ULONG lHashVal, [out] ITypeInfo ** ppTInfo ); } [ object, uuid(00020401-0000-0000-C000-000000000046), pointer_default(unique) ] interface ITypeInfo : IUnknown { HRESULT GetTypeAttr( [out] LPTYPEATTR * ppTypeAttr, [out] DWORD * pReserved ); HRESULT GetTypeComp( [out] ITypeComp ** ppTComp ); HRESULT GetFuncDesc( [in] UINT index, [out] LPFUNCDESC * ppFuncDesc, [out] DWORD * pReserved ); HRESULT GetVarDesc( [in] UINT index, [out] LPVARDESC * ppVarDesc, [out] DWORD * pReserved ); HRESULT GetNames( [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 ); HRESULT Opnum10NotUsedOnWire( void ); HRESULT Opnum11NotUsedOnWire( void ); HRESULT GetDocumentation( [in] MEMBERID memid, [in] DWORD refPtrFlags, [out] BSTR * pBstrName, [out] BSTR * pBstrDocString, [out] DWORD * pdwHelpContext, [out] BSTR * pBstrHelpFile ); HRESULT GetDllEntry( [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 ); HRESULT Opnum15NotUsedOnWire( void ); HRESULT CreateInstance( [in] REFIID riid, [out, iid_is(riid)] IUnknown ** ppvObj ); HRESULT GetMops( [in] MEMBERID memid, [out] BSTR * pBstrMops ); HRESULT GetContainingTypeLib( [out] ITypeLib ** ppTLib, [out] UINT * pIndex ); HRESULT Opnum19NotUsedOnWire( void ); HRESULT Opnum20NotUsedOnWire( void ); HRESULT Opnum21NotUsedOnWire( void ); } [ object, uuid(00020412-0000-0000-C000-000000000046), pointer_default(unique) ] interface ITypeInfo2 : ITypeInfo { 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 ); HRESULT GetDocumentation2( [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 { HRESULT GetTypeInfoCount( [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 ); HRESULT GetLibAttr( [out] LPTLIBATTR * ppTLibAttr, [out] DWORD * pReserved ); HRESULT GetTypeComp( [out] ITypeComp ** ppTComp ); HRESULT GetDocumentation( [in] INT index, [in] DWORD refPtrFlags, [out] BSTR * pBstrName, [out] BSTR * pBstrDocString, [out] DWORD * pdwHelpContext, [out] BSTR * pBstrHelpFile ); HRESULT IsName( [in] LPOLESTR szNameBuf, [in] ULONG lHashVal, [out] BOOL * pfName, [out] BSTR * pBstrNameInLibrary ); HRESULT FindName( [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 * pBstrNameInLibrary ); HRESULT Opnum12NotUsedOnWire( void ); } [ object, uuid(00020411-0000-0000-C000-000000000046), pointer_default(unique) ] interface ITypeLib2 : ITypeLib { HRESULT GetCustData( [in] REFGUID guid, [out] VARIANT * pVarVal ); HRESULT GetLibStatistics( [out] ULONG * pcUniqueNames, [out] ULONG * pcchUniqueNames ); HRESULT GetDocumentation2( [in] INT index, [in] LCID lcid, [in] DWORD refPtrFlags, [out] BSTR *pbstrHelpString, [out] DWORD *pdwHelpStringContext, [out] BSTR *pbstrHelpStringDll ); HRESULT GetAllCustData( [out] CUSTDATA * pCustData ); }