/* * 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 */ #ifndef DO_NO_IMPORTS import "objidl.idl"; #endif 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; } DUMMYUNIONNAME; }; /* 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] ; } 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 = 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_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") /* 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_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 (__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; } DUMMYUNIONNAME; 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, 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(); } [ 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); }