2 * Copyright 2002 Ove Kaaven
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
24 interface IRecordInfo;
28 pointer_default(unique)
30 interface IOleAutomationTypes
37 typedef struct tagSAFEARRAYBOUND {
40 } SAFEARRAYBOUND, *LPSAFEARRAYBOUND;
42 typedef [unique] struct _wireVARIANT *wireVARIANT;
43 typedef [unique] struct _wireBRECORD *wireBRECORD;
45 typedef struct _wireSAFEARR_BSTR {
47 [size_is(Size), ref] wireBSTR *aBstr;
50 typedef struct _wireSAFEARR_UNKNOWN {
52 [size_is(Size), ref] IUnknown **apUnknown;
55 typedef struct _wireSAFEARR_DISPATCH {
57 [size_is(Size), ref] IDispatch **apDispatch;
60 typedef struct _wireSAFEARR_VARIANT {
62 [size_is(Size), ref] wireVARIANT *aVariant;
65 typedef struct _wireSAFEARR_BRECORD {
67 [size_is(Size), ref] wireBRECORD *aRecord;
70 typedef struct _wireSAFEARR_HAVEIID {
72 [size_is(Size), ref] IUnknown **apUnknown;
76 typedef [v1_enum] enum tagSF_TYPE {
83 SF_UNKNOWN = VT_UNKNOWN,
84 SF_DISPATCH = VT_DISPATCH,
85 SF_VARIANT = VT_VARIANT,
86 SF_RECORD = VT_RECORD,
87 SF_HAVEIID = VT_UNKNOWN|VT_RESERVED,
90 typedef union _wireSAFEARRAY_UNION switch(ULONG sfType) u {
91 case SF_BSTR: SAFEARR_BSTR BstrStr;
92 case SF_UNKNOWN: SAFEARR_UNKNOWN UnknownStr;
93 case SF_DISPATCH: SAFEARR_DISPATCH DispatchStr;
94 case SF_VARIANT: SAFEARR_VARIANT VariantStr;
95 case SF_RECORD: SAFEARR_BRECORD RecordStr;
96 case SF_HAVEIID: SAFEARR_HAVEIID HaveIidStr;
97 case SF_I1: BYTE_SIZEDARR ByteStr;
98 case SF_I2: WORD_SIZEDARR WordStr;
99 case SF_I4: DWORD_SIZEDARR LongStr;
100 case SF_I8: HYPER_SIZEDARR HyperStr;
103 typedef [unique] struct _wireSAFEARRAY {
108 SAFEARRAYUNION uArrayStructs;
109 [size_is(cDims)] SAFEARRAYBOUND rgsabound[];
112 typedef [unique] wireSAFEARRAY *wirePSAFEARRAY;
114 typedef struct tagSAFEARRAY {
120 SAFEARRAYBOUND rgsabound[];
123 typedef [wire_marshal(wirePSAFEARRAY)] SAFEARRAY *LPSAFEARRAY;
125 const USHORT FADF_AUTO = 0x0001;
126 const USHORT FADF_STATIC = 0x0002;
127 const USHORT FADF_EMBEDDED = 0x0004;
128 const USHORT FADF_FIXEDSIZE = 0x0010;
129 const USHORT FADF_RECORD = 0x0020;
130 const USHORT FADF_HAVEIID = 0x0040;
131 const USHORT FADF_HAVEVARTYPE = 0x0080;
132 const USHORT FADF_BSTR = 0x0100;
133 const USHORT FADF_UNKNOWN = 0x0200;
134 const USHORT FADF_DISPATCH = 0x0400;
135 const USHORT FADF_VARIANT = 0x0800;
136 const USHORT FADF_RESERVED = 0xF008;
137 /* Undocumented flags */
138 const USHORT FADF_DATADELETED = 0x1000; /* Data in a vector has been deleted */
139 const USHORT FADF_CREATEVECTOR = 0x2000; /* This array is a vector */
143 cpp_quote("#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)")
144 cpp_quote("#define __VARIANT_NAME_1 n1")
145 cpp_quote("#define __VARIANT_NAME_2 n2")
146 cpp_quote("#define __VARIANT_NAME_3 n3")
147 cpp_quote("#define __VARIANT_NAME_4 brecVal")
149 cpp_quote("#define __tagVARIANT")
150 cpp_quote("#define __VARIANT_NAME_1")
151 cpp_quote("#define __VARIANT_NAME_2")
152 cpp_quote("#define __VARIANT_NAME_3")
153 cpp_quote("#define __tagBRECORD")
154 cpp_quote("#define __VARIANT_NAME_4")
157 typedef [wire_marshal(wireVARIANT)] struct tagVARIANT VARIANT;
161 struct __tagVARIANT {
177 VARIANT_BOOL boolVal;
178 #if 0 /* illegal in C++ */
200 VARIANT_BOOL *pboolVal;
202 _VARIANT_BOOL *pbool;
212 IDispatch **ppdispVal;
216 struct __tagBRECORD {
218 IRecordInfo *pRecInfo;
227 typedef VARIANT *LPVARIANT;
228 typedef VARIANT VARIANTARG;
229 typedef VARIANTARG *LPVARIANTARG;
231 struct _wireBRECORD {
234 IRecordInfo *pRecInfo;
235 [size_is(clSize)] byte *pRecord;
238 struct _wireVARIANT {
245 [switch_is(vt)] union {
246 [case(VT_EMPTY, VT_NULL)] ;
247 [case(VT_I1)] signed char cVal;
248 [case(VT_UI2)] USHORT uiVal;
249 [case(VT_UI4)] ULONG ulVal;
250 [case(VT_INT)] INT intVal;
251 [case(VT_UINT)] UINT uintVal;
252 [case(VT_UI1)] BYTE bVal;
253 [case(VT_I2)] SHORT iVal;
254 [case(VT_I4)] LONG lVal;
255 [case(VT_R4)] FLOAT fltVal;
256 [case(VT_R8)] DOUBLE dblVal;
257 [case(VT_BOOL)] VARIANT_BOOL boolVal;
258 [case(VT_ERROR)] SCODE scode;
259 [case(VT_DATE)] DATE date;
260 [case(VT_BSTR)] wireBSTR bstrVal;
261 [case(VT_CY)] CY cyVal;
262 [case(VT_DECIMAL)] DECIMAL decVal;
263 [case(VT_UNKNOWN)] IUnknown *punkVal;
264 [case(VT_DISPATCH)] IDispatch *pdispVal;
265 [case(VT_ARRAY)] wireSAFEARRAY parray;
266 [case(VT_I1|VT_BYREF)] signed char *pcVal;
267 [case(VT_UI2|VT_BYREF)] USHORT *puiVal;
268 [case(VT_UI4|VT_BYREF)] ULONG *pulVal;
269 [case(VT_INT|VT_BYREF)] INT *pintVal;
270 [case(VT_UINT|VT_BYREF)] UINT *puintVal;
271 [case(VT_UI1|VT_BYREF)] BYTE *pbVal;
272 [case(VT_I2|VT_BYREF)] SHORT *piVal;
273 [case(VT_I4|VT_BYREF)] LONG *plVal;
274 [case(VT_R4|VT_BYREF)] FLOAT *pfltVal;
275 [case(VT_R8|VT_BYREF)] DOUBLE *pdblVal;
276 [case(VT_BOOL|VT_BYREF)] VARIANT_BOOL *pboolVal;
277 [case(VT_ERROR|VT_BYREF)] SCODE *pscode;
278 [case(VT_DATE|VT_BYREF)] DATE *pdate;
279 [case(VT_BSTR|VT_BYREF)] wireBSTR *pbstrVal;
280 [case(VT_VARIANT|VT_BYREF)] wireVARIANT *pvarVal;
281 [case(VT_CY|VT_BYREF)] CY *pcyVal;
282 [case(VT_DECIMAL|VT_BYREF)] DECIMAL *pdecVal;
283 [case(VT_UNKNOWN|VT_BYREF)] IUnknown **ppunkVal;
284 [case(VT_DISPATCH|VT_BYREF)] IDispatch **ppdispVal;
285 [case(VT_ARRAY|VT_BYREF)] wireSAFEARRAY *pparray;
286 [case(VT_RECORD, VT_RECORD|VT_BYREF)] wireBRECORD brecVal;
293 typedef DWORD HREFTYPE;
294 typedef DISPID MEMBERID;
296 typedef [v1_enum] enum tagTYPEKIND {
308 typedef struct tagTYPEDESC {
309 [switch_is(vt)] union {
310 [case(VT_PTR, VT_SAFEARRAY)] struct tagTYPEDESC *lptdesc;
311 [case(VT_CARRAY)] struct tagARRAYDESC *lpadesc;
312 [case(VT_USERDEFINED)] HREFTYPE hreftype;
318 typedef struct tagARRAYDESC {
321 [size_is(cDims)] SAFEARRAYBOUND rgbounds[];
324 typedef struct tagPARAMDESCEX {
326 VARIANTARG varDefaultValue;
327 } PARAMDESCEX, *LPPARAMDESCEX;
329 typedef struct tagPARAMDESC {
330 LPPARAMDESCEX pparamdescex;
332 } PARAMDESC, *LPPARAMDESC;
334 const USHORT PARAMFLAG_NONE = 0x00;
335 const USHORT PARAMFLAG_FIN = 0x01;
336 const USHORT PARAMFLAG_FOUT = 0x02;
337 const USHORT PARAMFLAG_FLCID = 0x04;
338 const USHORT PARAMFLAG_FRETVAL = 0x08;
339 const USHORT PARAMFLAG_FOPT = 0x10;
340 const USHORT PARAMFLAG_FHASDEFAULT = 0x20;
341 const USHORT PARAMFLAG_FHASCUSTDATA = 0x40;
343 typedef struct tagIDLDESC {
346 } IDLDESC, *LPIDLDESC;
348 const USHORT IDLFLAG_NONE = PARAMFLAG_NONE;
349 const USHORT IDLFLAG_FIN = PARAMFLAG_FIN;
350 const USHORT IDLFLAG_FOUT = PARAMFLAG_FOUT;
351 const USHORT IDLFLAG_FLCID = PARAMFLAG_FLCID;
352 const USHORT IDLFLAG_FRETVAL = PARAMFLAG_FRETVAL;
354 cpp_quote("#if 0") /* for IDL only */
355 typedef struct tagELEMDESC {
359 cpp_quote("#else") /* C/C++ defs */
360 cpp_quote("typedef struct tagELEMDESC {")
361 cpp_quote(" TYPEDESC tdesc;")
362 cpp_quote(" union {")
363 cpp_quote(" IDLDESC idldesc;")
364 cpp_quote(" PARAMDESC paramdesc;")
365 cpp_quote(" } DUMMYUNIONNAME;")
366 cpp_quote("} ELEMDESC, *LPELEMDESC;")
369 typedef struct tagTYPEATTR {
373 MEMBERID memidConstructor;
374 MEMBERID memidDestructor;
375 LPOLESTR lpstrSchema;
376 ULONG cbSizeInstance;
388 } TYPEATTR, *LPTYPEATTR;
390 typedef struct tagDISPPARAMS {
391 [size_is(cArgs)] VARIANTARG *rgvarg;
392 [size_is(cNamedArgs)] DISPID *rgdispidNamedArgs;
397 cpp_quote("#if 0") /* for IDL only */
398 typedef struct tagEXCEPINFO {
402 BSTR bstrDescription;
406 ULONG pfnDeferredFillIn;
410 cpp_quote("typedef struct tagEXCEPINFO {")
411 cpp_quote(" WORD wCode;")
412 cpp_quote(" WORD wReserved;")
413 cpp_quote(" BSTR bstrSource;")
414 cpp_quote(" BSTR bstrDescription;")
415 cpp_quote(" BSTR bstrHelpFile;")
416 cpp_quote(" DWORD dwHelpContext;")
417 cpp_quote(" PVOID pvReserved;")
418 cpp_quote(" HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);")
419 cpp_quote(" SCODE scode;")
420 cpp_quote("} EXCEPINFO, *LPEXCEPINFO;")
423 typedef [v1_enum] enum tagCALLCONV {
427 CC_PASCAL = CC_MSCPASCAL,
437 typedef [v1_enum] enum tagFUNCKIND {
445 typedef [v1_enum] enum tagINVOKEKIND {
447 INVOKE_PROPERTYGET = 2,
448 INVOKE_PROPERTYPUT = 4,
449 INVOKE_PROPERTYPUTREF = 8
452 typedef struct tagFUNCDESC {
454 [size_is(cScodes)] SCODE *lprgscode;
455 [size_is(cParams)] ELEMDESC *lprgelemdescParam;
463 ELEMDESC elemdescFunc;
465 } FUNCDESC, *LPFUNCDESC;
467 typedef [v1_enum] enum tagVARKIND {
474 const USHORT IMPLTYPEFLAG_FDEFAULT = 0x1;
475 const USHORT IMPLTYPEFLAG_FSOURCE = 0x2;
476 const USHORT IMPLTYPEFLAG_FRESTRICTED = 0x4;
477 const USHORT IMPLTYPEFLAG_FDEFAULTVTABLE = 0x8;
479 typedef struct tagVARDESC {
481 LPOLESTR lpstrSchema;
482 [switch_is(varkind)] union {
483 [case(VAR_PERINSTANCE, VAR_DISPATCH, VAR_STATIC)] ULONG oInst;
484 [case(VAR_CONST)] VARIANT *lpvarValue;
486 ELEMDESC elemdescVar;
489 } VARDESC, *LPVARDESC;
491 typedef enum tagTYPEFLAGS {
492 TYPEFLAG_FAPPOBJECT = 0x0001,
493 TYPEFLAG_FCANCREATE = 0x0002,
494 TYPEFLAG_FLICENSED = 0x0004,
495 TYPEFLAG_FPREDECLID = 0x0008,
496 TYPEFLAG_FHIDDEN = 0x0010,
497 TYPEFLAG_FCONTROL = 0x0020,
498 TYPEFLAG_FDUAL = 0x0040,
499 TYPEFLAG_FNONEXTENSIBLE = 0x0080,
500 TYPEFLAG_FOLEAUTOMATION = 0x0100,
501 TYPEFLAG_FRESTRICTED = 0x0200,
502 TYPEFLAG_FAGGREGATABLE = 0x0400,
503 TYPEFLAG_FREPLACEABLE = 0x0800,
504 TYPEFLAG_FDISPATCHABLE = 0x1000,
505 TYPEFLAG_FREVERSEBIND = 0x2000,
506 TYPEFLAG_FPROXY = 0x4000
509 typedef enum tagFUNCFLAGS {
510 FUNCFLAG_FRESTRICTED = 0x0001,
511 FUNCFLAG_FSOURCE = 0x0002,
512 FUNCFLAG_FBINDABLE = 0x0004,
513 FUNCFLAG_FREQUESTEDIT = 0x0008,
514 FUNCFLAG_FDISPLAYBIND = 0x0010,
515 FUNCFLAG_FDEFAULTBIND = 0x0020,
516 FUNCFLAG_FHIDDEN = 0x0040,
517 FUNCFLAG_FUSESGETLASTERROR = 0x0080,
518 FUNCFLAG_FDEFAULTCOLLELEM = 0x0100,
519 FUNCFLAG_FUIDEFAULT = 0x0200,
520 FUNCFLAG_FNONBROWSABLE = 0x0400,
521 FUNCFLAG_FREPLACEABLE = 0x0800,
522 FUNCFLAG_FIMMEDIATEBIND = 0x1000
525 typedef enum tagVARFLAGS {
526 VARFLAG_FREADONLY = 0x0001,
527 VARFLAG_FSOURCE = 0x0002,
528 VARFLAG_FBINDABLE = 0x0004,
529 VARFLAG_FREQUESTEDIT = 0x0008,
530 VARFLAG_FDISPLAYBIND = 0x0010,
531 VARFLAG_FDEFAULTBIND = 0x0020,
532 VARFLAG_FHIDDEN = 0x0040,
533 VARFLAG_FRESTRICTED = 0x0080,
534 VARFLAG_FDEFAULTCOLLELEM = 0x0100,
535 VARFLAG_FUIDEFAULT = 0x0200,
536 VARFLAG_FNONBROWSABLE = 0x0400,
537 VARFLAG_FREPLACEABLE = 0x0800,
538 VARFLAG_FIMMEDIATEBIND = 0x1000
541 typedef [wire_marshal(DWORD)] struct tagCLEANLOCALSTORAGE {
542 IUnknown *pInterface;
547 typedef struct tagCUSTDATAITEM {
550 } CUSTDATAITEM, *LPCUSTDATAITEM;
552 typedef struct tagCUSTDATA {
554 [size_is(cCustData)] LPCUSTDATAITEM prgCustData;
555 } CUSTDATA, *LPCUSTDATA;
557 } /* interface IOleAutomationTypes */
559 /******************** INTERFACES ********************/
563 uuid(00020400-0000-0000-C000-000000000046),
564 pointer_default(unique)
566 interface IDispatch : IUnknown
568 typedef [unique] IDispatch *LPDISPATCH;
570 const DISPID DISPID_UNKNOWN = -1;
571 const DISPID DISPID_VALUE = 0;
572 const DISPID DISPID_PROPERTYPUT = -3;
573 const DISPID DISPID_NEWENUM = -4;
574 const DISPID DISPID_EVALUATE = -5;
575 const DISPID DISPID_CONSTRUCTOR = -6;
576 const DISPID DISPID_DESTRUCTOR = -7;
577 const DISPID DISPID_COLLECT = -8;
579 HRESULT GetTypeInfoCount(
580 [out] UINT *pctinfo);
585 [out] ITypeInfo **ppTInfo);
587 HRESULT GetIDsOfNames(
589 [in, size_is(cNames)] LPOLESTR *rgszNames,
592 [out, size_is(cNames)] DISPID *rgDispId);
596 [in] DISPID dispIdMember,
600 [in, out] DISPPARAMS *pDispParams,
601 [out] VARIANT *pVarResult,
602 [out] EXCEPINFO *pExcepInfo,
603 [out] UINT *puArgErr);
606 HRESULT RemoteInvoke(
607 [in] DISPID dispIdMember,
611 [in] DISPPARAMS *pDispParams,
612 [out] VARIANT *pVarResult,
613 [out] EXCEPINFO *pExcepInfo,
616 [in, size_is(cVarRef)] UINT *rgVarRefIdx,
617 [in, out, size_is(cVarRef)] VARIANTARG *rgVarRef);
622 uuid(00020404-0000-0000-C000-000000000046),
623 pointer_default(unique)
625 interface IEnumVARIANT : IUnknown
627 typedef [unique] IEnumVARIANT *LPENUMVARIANT;
632 [out] VARIANT *rgVar,
633 [out] ULONG *pCeltFetched);
638 [out, size_is(celt), length_is(*pCeltFetched)]
640 [out] ULONG *pCeltFetched);
648 [out] IEnumVARIANT **ppEnum);
653 uuid(00020403-0000-0000-C000-000000000046),
654 pointer_default(unique)
656 interface ITypeComp : IUnknown
658 typedef [unique] ITypeComp *LPTYPECOMP;
660 typedef [v1_enum] enum tagDESCKIND {
665 DESCKIND_IMPLICITAPPOBJ,
669 typedef union tagBINDPTR {
670 FUNCDESC *lpfuncdesc;
673 } BINDPTR, *LPBINDPTR;
677 [in] LPOLESTR szName,
680 [out] ITypeInfo **ppTInfo,
681 [out] DESCKIND *pDescKind,
682 [out] BINDPTR *pBindPtr);
686 [in] LPOLESTR szName,
689 [out] ITypeInfo **ppTInfo,
690 [out] DESCKIND *pDescKind,
691 [out] LPFUNCDESC *ppFuncDesc,
692 [out] LPVARDESC *ppVarDesc,
693 [out] ITypeComp **ppTypeComp,
694 [out] CLEANLOCALSTORAGE *pDummy);
698 [in] LPOLESTR szName,
700 [out] ITypeInfo **ppTInfo,
701 [out] ITypeComp **ppTComp);
704 HRESULT RemoteBindType(
705 [in] LPOLESTR szName,
707 [out] ITypeInfo **ppTInfo);
712 uuid(00020401-0000-0000-C000-000000000046),
713 pointer_default(unique)
715 interface ITypeInfo : IUnknown
717 typedef [unique] ITypeInfo *LPTYPEINFO;
721 [out] TYPEATTR **ppTypeAttr);
723 [call_as(GetTypeAttr)]
724 HRESULT RemoteGetTypeAttr(
725 [out] LPTYPEATTR *ppTypeAttr,
726 [out] CLEANLOCALSTORAGE *pDummy);
729 [out] ITypeComp **ppTComp);
734 [out] FUNCDESC **ppFuncDesc);
736 [call_as(GetFuncDesc)]
737 HRESULT RemoteGetFuncDesc(
739 [out] LPFUNCDESC *ppFuncDesc,
740 [out] CLEANLOCALSTORAGE *pDummy);
745 [out] VARDESC **ppVarDesc);
747 [call_as(GetVarDesc)]
748 HRESULT RemoteGetVarDesc(
750 [out] LPVARDESC *ppVarDesc,
751 [out] CLEANLOCALSTORAGE *pDummy);
756 [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgBstrNames,
758 [out] UINT *pcNames);
761 HRESULT RemoteGetNames(
763 [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgBstrNames,
765 [out] UINT *pcNames);
767 HRESULT GetRefTypeOfImplType(
769 [out] HREFTYPE *pRefType);
771 HRESULT GetImplTypeFlags(
773 [out] INT *pImplTypeFlags);
776 HRESULT GetIDsOfNames(
777 [in, size_is(cNames)] LPOLESTR *rgszNames,
779 [out, size_is(cNames)] MEMBERID *pMemId);
781 [call_as(GetIDsOfNames)]
782 HRESULT LocalGetIDsOfNames();
786 [in] PVOID pvInstance,
789 [in, out] DISPPARAMS *pDispParams,
790 [out] VARIANT *pVarResult,
791 [out] EXCEPINFO *pExcepInfo,
792 [out] UINT *puArgErr);
795 HRESULT LocalInvoke();
798 HRESULT GetDocumentation(
800 [out] BSTR *pBstrName,
801 [out] BSTR *pBstrDocString,
802 [out] DWORD *pdwHelpContext,
803 [out] BSTR *pBstrHelpFile);
805 [call_as(GetDocumentation)]
806 HRESULT RemoteGetDocumentation(
808 [in] DWORD refPtrFlags,
809 [out] BSTR *pBstrName,
810 [out] BSTR *pBstrDocString,
811 [out] DWORD *pdwHelpContext,
812 [out] BSTR *pBstrHelpFile);
817 [in] INVOKEKIND invKind,
818 [out] BSTR *pBstrDllName,
819 [out] BSTR *pBstrName,
820 [out] WORD *pwOrdinal);
822 [call_as(GetDllEntry)]
823 HRESULT RemoteGetDllEntry(
825 [in] INVOKEKIND invKind,
826 [in] DWORD refPtrFlags,
827 [out] BSTR *pBstrDllName,
828 [out] BSTR *pBstrName,
829 [out] WORD *pwOrdinal);
831 HRESULT GetRefTypeInfo(
832 [in] HREFTYPE hRefType,
833 [out] ITypeInfo **ppTInfo);
836 HRESULT AddressOfMember(
838 [in] INVOKEKIND invKind,
841 [call_as(AddressOfMember)]
842 HRESULT LocalAddressOfMember();
845 HRESULT CreateInstance(
846 [in] IUnknown *pUnkOuter,
848 [out, iid_is(riid)] PVOID *ppvObj);
850 [call_as(CreateInstance)]
851 HRESULT RemoteCreateInstance(
853 [out, iid_is(riid)] IUnknown **ppvObj);
857 [out] BSTR *pBstrMops);
860 HRESULT GetContainingTypeLib(
861 [out] ITypeLib **ppTLib,
864 [call_as(GetContainingTypeLib)]
865 HRESULT RemoteGetContainingTypeLib(
866 [out] ITypeLib **ppTLib,
870 void ReleaseTypeAttr(
871 [in] TYPEATTR *pTypeAttr);
873 [call_as(ReleaseTypeAttr)]
874 HRESULT LocalReleaseTypeAttr();
877 void ReleaseFuncDesc(
878 [in] FUNCDESC *pFuncDesc);
880 [call_as(ReleaseFuncDesc)]
881 HRESULT LocalReleaseFuncDesc();
885 [in] VARDESC *pVarDesc);
887 [call_as(ReleaseVarDesc)]
888 HRESULT LocalReleaseVarDesc();
893 uuid(00020412-0000-0000-C000-000000000046),
894 pointer_default(unique)
896 interface ITypeInfo2 : ITypeInfo
898 typedef [unique] ITypeInfo2 *LPTYPEINFO2;
901 [out] TYPEKIND *pTypeKind);
903 HRESULT GetTypeFlags(
904 [out] ULONG *pTypeFlags);
906 HRESULT GetFuncIndexOfMemId(
908 [in] INVOKEKIND invKind,
909 [out] UINT *pFuncIndex);
911 HRESULT GetVarIndexOfMemId(
913 [out] UINT *pVarIndex);
917 [out] VARIANT *pVarVal);
919 HRESULT GetFuncCustData(
922 [out] VARIANT *pVarVal);
924 HRESULT GetParamCustData(
926 [in] UINT indexParam,
928 [out] VARIANT *pVarVal);
930 HRESULT GetVarCustData(
933 [out] VARIANT *pVarVal);
935 HRESULT GetImplTypeCustData(
938 [out] VARIANT *pVarVal);
941 HRESULT GetDocumentation2(
944 [out] BSTR *pbstrHelpString,
945 [out] DWORD *pdwHelpStringContext,
946 [out] BSTR *pbstrHelpStringDll);
948 [call_as(GetDocumentation2)]
949 HRESULT RemoteGetDocumentation2(
952 [in] DWORD refPtrFlags,
953 [out] BSTR *pbstrHelpString,
954 [out] DWORD *pdwHelpStringContext,
955 [out] BSTR *pbstrHelpStringDll);
957 HRESULT GetAllCustData(
958 [out] CUSTDATA *pCustData);
960 HRESULT GetAllFuncCustData(
962 [out] CUSTDATA *pCustData);
964 HRESULT GetAllParamCustData(
966 [in] UINT indexParam,
967 [out] CUSTDATA *pCustData);
969 HRESULT GetAllVarCustData(
971 [out] CUSTDATA *pCustData);
973 HRESULT GetAllImplTypeCustData(
975 [out] CUSTDATA *pCustData);
980 uuid(00020402-0000-0000-C000-000000000046),
981 pointer_default(unique)
983 interface ITypeLib : IUnknown
985 typedef [unique] ITypeLib *LPTYPELIB;
987 typedef [v1_enum] enum tagSYSKIND {
993 typedef [v1_enum] enum tagLIBFLAGS {
994 LIBFLAG_FRESTRICTED = 0x01,
995 LIBFLAG_FCONTROL = 0x02,
996 LIBFLAG_FHIDDEN = 0x04,
997 LIBFLAG_FHASDISKIMAGE = 0x08
1000 typedef struct tagTLIBATTR {
1007 } TLIBATTR, *LPTLIBATTR;
1010 UINT GetTypeInfoCount();
1012 [call_as(GetTypeInfoCount)]
1013 HRESULT RemoteGetTypeInfoCount(
1014 [out] UINT *pcTInfo);
1016 HRESULT GetTypeInfo(
1018 [out] ITypeInfo **ppTInfo);
1020 HRESULT GetTypeInfoType(
1022 [out] TYPEKIND *pTKind);
1024 HRESULT GetTypeInfoOfGuid(
1026 [out] ITypeInfo **ppTinfo);
1030 [out] TLIBATTR **ppTLibAttr);
1032 [call_as(GetLibAttr)]
1033 HRESULT RemoteGetLibAttr(
1034 [out] LPTLIBATTR *ppTLibAttr,
1035 [out] CLEANLOCALSTORAGE *pDummy);
1037 HRESULT GetTypeComp(
1038 [out] ITypeComp **ppTComp);
1041 HRESULT GetDocumentation(
1043 [out] BSTR *pBstrName,
1044 [out] BSTR *pBstrDocString,
1045 [out] DWORD *pdwHelpContext,
1046 [out] BSTR *pBstrHelpFile);
1048 [call_as(GetDocumentation)]
1049 HRESULT RemoteGetDocumentation(
1051 [in] DWORD refPtrFlags,
1052 [out] BSTR *pBstrName,
1053 [out] BSTR *pBstrDocString,
1054 [out] DWORD *pdwHelpContext,
1055 [out] BSTR *pBstrHelpFile);
1059 [in, out] LPOLESTR szNameBuf,
1060 [in] ULONG lHashVal,
1061 [out] BOOL *pfName);
1064 HRESULT RemoteIsName(
1065 [in] LPOLESTR szNameBuf,
1066 [in] ULONG lHashVal,
1068 [out] BSTR *pBstrLibName);
1072 [in, out] LPOLESTR szNameBuf,
1073 [in] ULONG lHashVal,
1074 [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo,
1075 [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId,
1076 [in, out] USHORT *pcFound);
1079 HRESULT RemoteFindName(
1080 [in] LPOLESTR szNameBuf,
1081 [in] ULONG lHashVal,
1082 [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo,
1083 [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId,
1084 [in, out] USHORT *pcFound,
1085 [out] BSTR *pBstrLibName);
1088 void ReleaseTLibAttr(
1089 [in] TLIBATTR *pTLibAttr);
1091 [call_as(ReleaseTLibAttr)]
1092 HRESULT LocalReleaseTLibAttr();
1097 uuid(00020411-0000-0000-C000-000000000046),
1098 pointer_default(unique)
1100 interface ITypeLib2 : ITypeLib
1102 typedef [unique] ITypeLib2 *LPTYPELIB2;
1104 HRESULT GetCustData(
1106 [out] VARIANT *pVarVal);
1109 HRESULT GetLibStatistics(
1110 [out] ULONG *pcUniqueNames,
1111 [out] ULONG *pcchUniqueNames);
1113 [call_as(GetLibStatistics)]
1114 HRESULT RemoteGetLibStatistics(
1115 [out] ULONG *pcUniqueNames,
1116 [out] ULONG *pcchUniqueNames);
1119 HRESULT GetDocumentation2(
1122 [out] BSTR *pbstrHelpString,
1123 [out] DWORD *pdwHelpStringContext,
1124 [out] BSTR *pbstrHelpStringDll);
1126 [call_as(GetDocumentation2)]
1127 HRESULT RemoteGetDocumentation2(
1130 [in] DWORD refPtrFlags,
1131 [out] BSTR *pbstrHelpString,
1132 [out] DWORD *pdwHelpStringContext,
1133 [out] BSTR *pbstrHelpStringDll);
1135 HRESULT GetAllCustData(
1136 [out] CUSTDATA *pCustData);
1142 uuid(00020410-0000-0000-C000-000000000046),
1143 pointer_default(unique)
1145 interface ITypeChangeEvents : IUnknown
1147 typedef [unique] ITypeChangeEvents *LPTYPECHANGEEVENTS;
1149 typedef enum tagCHANGEKIND {
1150 CHANGEKIND_ADDMEMBER,
1151 CHANGEKIND_DELETEMEMBER,
1152 CHANGEKIND_SETNAMES,
1153 CHANGEKIND_SETDOCUMENTATION,
1155 CHANGEKIND_INVALIDATE,
1156 CHANGEKIND_CHANGEFAILED,
1160 HRESULT RequestTypeChange(
1161 [in] CHANGEKIND changeKind,
1162 [in] ITypeInfo *pTInfoBefore,
1163 [in] LPOLESTR pStrName,
1164 [out] INT *pfCancel);
1166 HRESULT AfterTypeChange(
1167 [in] CHANGEKIND changeKind,
1168 [in] ITypeInfo *pTInfoAfter,
1169 [in] LPOLESTR pStrName);
1174 uuid(1CF2B120-547D-101B-8E65-08002B2BD119),
1175 pointer_default(unique)
1177 interface IErrorInfo : IUnknown
1179 typedef [unique] IErrorInfo *LPERRORINFO;
1185 [out] BSTR *pBstrSource);
1187 HRESULT GetDescription(
1188 [out] BSTR *pBstrDescription);
1190 HRESULT GetHelpFile(
1191 [out] BSTR *pBstrHelpFile);
1193 HRESULT GetHelpContext(
1194 [out] DWORD *pdwHelpContext);
1199 uuid(22F03340-547D-101B-8E65-08002B2BD119),
1200 pointer_default(unique)
1202 interface ICreateErrorInfo : IUnknown
1204 typedef [unique] ICreateErrorInfo *LPCREATEERRORINFO;
1207 [in] REFGUID rguid);
1210 [in] LPOLESTR szSource);
1212 HRESULT SetDescription(
1213 [in] LPOLESTR szDescription);
1215 HRESULT SetHelpFile(
1216 [in] LPOLESTR szHelpFile);
1218 HRESULT SetHelpContext(
1219 [in] DWORD dwHelpContext);
1224 uuid(DF0B3D60-548F-101B-8E65-08002B2BD119),
1225 pointer_default(unique)
1227 interface ISupportErrorInfo : IUnknown
1229 typedef [unique] ISupportErrorInfo *LPSUPPORTERRORINFO;
1231 HRESULT InterfaceSupportsErrorInfo(
1237 uuid(0000002E-0000-0000-C000-000000000046)
1239 interface ITypeFactory : IUnknown
1241 HRESULT CreateFromTypeInfo(
1242 [in] ITypeInfo *pTypeInfo,
1244 [out, iid_is(riid)] IUnknown **ppv);
1250 uuid(0000002D-0000-0000-C000-000000000046)
1252 interface ITypeMarshal : IUnknown
1256 [in] DWORD dwDestContext,
1257 [in] PVOID pvDestContext,
1258 [out] ULONG *pSize);
1262 [in] DWORD dwDestContext,
1263 [in] PVOID pvDestContext,
1264 [in] ULONG cbBufferLength,
1265 [out] BYTE *pBuffer,
1266 [out] ULONG *pcbWritten);
1271 [in] ULONG cbBufferLength,
1273 [out] ULONG *pcbRead);
1282 uuid(0000002F-0000-0000-C000-000000000046)
1284 interface IRecordInfo : IUnknown
1286 typedef [unique] IRecordInfo *LPRECORDINFO;
1291 HRESULT RecordClear(
1292 [in] PVOID pvExisting);
1295 [in] PVOID pvExisting,
1302 [out] BSTR *pbstrName);
1305 [out] ULONG *pcbSize);
1307 HRESULT GetTypeInfo(
1308 [out] ITypeInfo **ppTypeInfo);
1312 [in] LPCOLESTR szFieldName,
1313 [out] VARIANT *pvarField);
1315 HRESULT GetFieldNoCopy(
1317 [in] LPCOLESTR szFieldName,
1318 [out] VARIANT *pvarField,
1319 [out] PVOID *ppvDataCArray);
1323 [in, out] PVOID pvData,
1324 [in] LPCOLESTR szFieldName,
1325 [in] VARIANT *pvarField);
1327 HRESULT PutFieldNoCopy(
1329 [in, out] PVOID pvData,
1330 [in] LPCOLESTR szFieldName,
1331 [in] VARIANT *pvarField);
1333 HRESULT GetFieldNames(
1334 [in, out] ULONG *pcNames,
1335 [out, size_is(*pcNames), length_is(*pcNames)] BSTR *rgBstrNames);
1337 BOOL IsMatchingType(
1338 [in] IRecordInfo *pRecordInfo);
1340 PVOID RecordCreate();
1342 HRESULT RecordCreateCopy(
1343 [in] PVOID pvSource,
1344 [out] PVOID *ppvDest);
1346 HRESULT RecordDestroy(
1347 [in] PVOID pvRecord);
1353 uuid(00020405-0000-0000-C000-000000000046),
1354 pointer_default(unique)
1356 interface ICreateTypeInfo : IUnknown
1358 typedef [unique] ICreateTypeInfo *LPCREATETYPEINFO;
1363 HRESULT SetTypeFlags(
1364 [in] UINT uTypeFlags);
1366 HRESULT SetDocString(
1367 [in] LPOLESTR pStrDoc);
1369 HRESULT SetHelpContext(
1370 [in] DWORD dwHelpContext);
1373 [in] WORD wMajorVerNum,
1374 [in] WORD wMinorVerNum);
1376 HRESULT AddRefTypeInfo(
1377 [in] ITypeInfo *pTInfo,
1378 [in] HREFTYPE *phRefType);
1380 HRESULT AddFuncDesc(
1382 [in] FUNCDESC *pFuncDesc);
1384 HRESULT AddImplType(
1386 [in] HREFTYPE hRefType);
1388 HRESULT SetImplTypeFlags(
1390 [in] INT implTypeFlags);
1392 HRESULT SetAlignment(
1393 [in] WORD cbAlignment);
1396 [in] LPOLESTR pStrSchema);
1400 [in] VARDESC *pVarDesc);
1402 HRESULT SetFuncAndParamNames(
1404 [in, size_is(cNames)] LPOLESTR *rgszNames,
1409 [in] LPOLESTR szName);
1411 HRESULT SetTypeDescAlias(
1412 [in] TYPEDESC *pTDescAlias);
1414 HRESULT DefineFuncAsDllEntry(
1416 [in] LPOLESTR szDllName,
1417 [in] LPOLESTR szProcName);
1419 HRESULT SetFuncDocString(
1421 [in] LPOLESTR szDocString);
1423 HRESULT SetVarDocString(
1425 [in] LPOLESTR szDocString);
1427 HRESULT SetFuncHelpContext(
1429 [in] DWORD dwHelpContext);
1431 HRESULT SetVarHelpContext(
1433 [in] DWORD dwHelpContext);
1437 [in] BSTR bstrMops);
1439 HRESULT SetTypeIdldesc(
1440 [in] IDLDESC * pIdlDesc);
1448 uuid(0002040E-0000-0000-C000-000000000046),
1449 pointer_default(unique)
1451 interface ICreateTypeInfo2 : ICreateTypeInfo
1453 typedef [unique] ICreateTypeInfo2 *LPCREATETYPEINFO2;
1455 HRESULT DeleteFuncDesc(
1458 HRESULT DeleteFuncDescByMemId(
1459 [in] MEMBERID memid,
1460 [in] INVOKEKIND invKind);
1462 HRESULT DeleteVarDesc(
1465 HRESULT DeleteVarDescByMemId(
1466 [in] MEMBERID memid);
1468 HRESULT DeleteImplType(
1471 HRESULT SetCustData(
1473 [in] VARIANT *pVarVal);
1475 HRESULT SetFuncCustData(
1478 [in] VARIANT *pVarVal);
1480 HRESULT SetParamCustData(
1481 [in] UINT indexFunc,
1482 [in] UINT indexParam,
1484 [in] VARIANT *pVarVal);
1486 HRESULT SetVarCustData(
1489 [in] VARIANT *pVarVal);
1491 HRESULT SetImplTypeCustData(
1494 [in] VARIANT *pVarVal);
1496 HRESULT SetHelpStringContext(
1497 [in] ULONG dwHelpStringContext);
1499 HRESULT SetFuncHelpStringContext(
1501 [in] ULONG dwHelpStringContext);
1503 HRESULT SetVarHelpStringContext(
1505 [in] ULONG dwHelpStringContext);
1507 HRESULT Invalidate();
1510 [in] LPOLESTR szName);
1516 uuid(00020406-0000-0000-C000-000000000046),
1517 pointer_default(unique)
1519 interface ICreateTypeLib : IUnknown
1521 typedef [unique] ICreateTypeLib *LPCREATETYPELIB;
1523 HRESULT CreateTypeInfo(
1524 [in] LPOLESTR szName,
1525 [in] TYPEKIND tkind,
1526 [out] ICreateTypeInfo **ppCTInfo);
1529 [in] LPOLESTR szName);
1532 [in] WORD wMajorVerNum,
1533 [in] WORD wMinorVerNum);
1538 HRESULT SetDocString(
1539 [in] LPOLESTR szDoc);
1541 HRESULT SetHelpFileName(
1542 [in] LPOLESTR szHelpFileName);
1544 HRESULT SetHelpContext(
1545 [in] DWORD dwHelpContext);
1550 HRESULT SetLibFlags(
1551 [in] UINT uLibFlags);
1553 HRESULT SaveAllChanges();
1559 uuid(0002040F-0000-0000-C000-000000000046),
1560 pointer_default(unique)
1562 interface ICreateTypeLib2 : ICreateTypeLib
1564 typedef [unique] ICreateTypeLib2 *LPCREATETYPELIB2;
1566 HRESULT DeleteTypeInfo(
1567 [in] LPOLESTR szName);
1569 HRESULT SetCustData(
1571 [in] VARIANT *pVarVal);
1573 HRESULT SetHelpStringContext(
1574 [in] ULONG dwHelpStringContext);
1576 HRESULT SetHelpStringDll(
1577 [in] LPOLESTR szFileName);
1581 /*****************************************************************************
1582 * IErrorLog interface
1586 uuid(3127ca40-446e-11ce-8135-00aa004bb851),
1587 pointer_default(unique)
1589 interface IErrorLog : IUnknown
1591 typedef IErrorLog *LPERRORLOG;
1594 [in] LPCOLESTR pszPropName,
1595 [in] EXCEPINFO *pExcepInfo);
1599 /*****************************************************************************
1600 * IPropertyBag interface
1604 uuid(55272a00-42cb-11ce-8135-00aa004bb851),
1605 pointer_default(unique)
1607 interface IPropertyBag : IUnknown
1609 typedef IPropertyBag *LPPROPERTYBAG;
1613 [in] LPCOLESTR pszPropName,
1614 [in, out] VARIANT *pVar,
1615 [in] IErrorLog *pErrorLog);
1619 [in] LPCOLESTR pszPropName,
1620 [out] VARIANT *pVar,
1621 [in] IErrorLog *pErrorLog,
1623 [in] IUnknown *pUnkObj);
1626 [in] LPCOLESTR pszPropName,
1627 [in] VARIANT *pVar);