2 * Defines the COM interfaces and APIs related to OLE automation support.
4 * Copyright (C) the Wine project
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #ifndef __WINE_WINE_OBJ_OLEAUT_H
22 #define __WINE_WINE_OBJ_OLEAUT_H
25 DEFINE_OLEGUID(IID_StdOle, 0x00020430,0,0);
27 /*****************************************************************************
28 * Predeclare the interfaces
30 DEFINE_OLEGUID(IID_IDispatch, 0x00020400,0,0);
31 typedef struct IDispatch IDispatch,*LPDISPATCH;
33 DEFINE_OLEGUID(IID_ITypeInfo, 0x00020401,0,0);
34 typedef struct ITypeInfo ITypeInfo,*LPTYPEINFO;
36 DEFINE_OLEGUID(IID_ITypeLib, 0x00020402,0,0);
37 typedef struct ITypeLib ITypeLib,*LPTYPELIB;
39 DEFINE_OLEGUID(IID_ITypeComp, 0x00020403,0,0);
40 typedef struct ITypeComp ITypeComp,*LPTYPECOMP;
42 DEFINE_OLEGUID(IID_IEnumVARIANT, 0x00020404,0,0);
43 typedef struct IEnumVARIANT IEnumVARIANT,*LPENUMVARIANT;
45 DEFINE_OLEGUID(IID_ICreateTypeInfo, 0x00020405,0,0);
46 typedef struct ICreateTypeInfo ICreateTypeInfo,*LPCREATETYPEINFO;
48 DEFINE_OLEGUID(IID_ICreateTypeLib, 0x00020406,0,0);
49 typedef struct ICreateTypeLib ICreateTypeLib,*LPCREATETYPELIB;
51 DEFINE_OLEGUID(IID_ICreateTypeInfo2,0x0002040E,0,0);
52 typedef struct ICreateTypeInfo2 ICreateTypeInfo2,*LPCREATETYPEINFO2;
54 DEFINE_OLEGUID(IID_ICreateTypeLib2, 0x0002040F,0,0);
55 typedef struct ICreateTypeLib2 ICreateTypeLib2,*LPCREATETYPELIB2;
57 DEFINE_OLEGUID(IID_ITypeChangeEvents,0x00020410,0,0);
58 typedef struct ITypeChangeEvents ITypeChangeEvents,*LPTYPECHANGEEVENTS;
60 DEFINE_OLEGUID(IID_ITypeLib2, 0x00020411,0,0);
61 typedef struct ITypeLib2 ITypeLib2,*LPTYPELIB2;
63 DEFINE_OLEGUID(IID_ITypeInfo2, 0x00020412,0,0);
64 typedef struct ITypeInfo2 ITypeInfo2,*LPTYPEINFO2;
66 /* The OLE Automation ProxyStub Interface Class (aka Typelib Marshaler) */
67 DEFINE_OLEGUID(CLSID_PSOAInterface, 0x00020424,0,0);
69 /*****************************************************************************
70 * Automation data types
73 /*****************************************************************
74 * SafeArray defines and structs
77 #define FADF_AUTO ( 0x1 )
78 #define FADF_STATIC ( 0x2 )
79 #define FADF_EMBEDDED ( 0x4 )
80 #define FADF_FIXEDSIZE ( 0x10 )
81 #define FADF_RECORD ( 0x20 )
82 #define FADF_HAVEIID ( 0x40 )
83 #define FADF_HAVEVARTYPE ( 0x80 )
84 #define FADF_BSTR ( 0x100 )
85 #define FADF_UNKNOWN ( 0x200 )
86 #define FADF_DISPATCH ( 0x400 )
87 #define FADF_VARIANT ( 0x800 )
88 #define FADF_RESERVED ( 0xf008 )
90 /* Undocumented flags */
91 #define FADF_CREATEVECTOR ( 0x2000 ) /* set when the safe array is created using SafeArrayCreateVector */
94 typedef struct tagSAFEARRAYBOUND
96 ULONG cElements; /* Number of elements in dimension */
97 LONG lLbound; /* Lower bound of dimension */
100 typedef struct tagSAFEARRAY
102 USHORT cDims; /* Count of array dimension */
103 USHORT fFeatures; /* Flags describing the array */
104 ULONG cbElements; /* Size of each element */
105 ULONG cLocks; /* Number of lock on array */
106 PVOID pvData; /* Pointer to data valid when cLocks > 0 */
107 SAFEARRAYBOUND rgsabound[ 1 ]; /* One bound for each dimension */
108 } SAFEARRAY, *LPSAFEARRAY;
110 typedef enum tagCALLCONV {
112 CC_MSCPASCAL = CC_CDECL + 1,
113 CC_PASCAL = CC_MSCPASCAL,
114 CC_MACPASCAL = CC_PASCAL + 1,
115 CC_STDCALL = CC_MACPASCAL + 1,
116 CC_RESERVED = CC_STDCALL + 1,
117 CC_SYSCALL = CC_RESERVED + 1,
118 CC_MPWCDECL = CC_SYSCALL + 1,
119 CC_MPWPASCAL = CC_MPWCDECL + 1,
120 CC_MAX = CC_MPWPASCAL + 1
126 * Declarations of the VARIANT structure and the VARIANT APIs.
129 * DISP_E_BADVARTYPE : The variant type vt in not a valid type of variant.
130 * DISP_E_OVERFLOW : The data pointed to by pvarSrc does not fit in the destination type.
131 * DISP_E_TYPEMISMATCH : The variant type vt is not a valid type of variant.
132 * E_INVALIDARG : One argument is invalid.
133 * * E_OUTOFMEMORY : Memory could not be allocated for the conversion.
134 * DISP_E_ARRAYISLOCKED : The variant contains an array that is locked.
136 #if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)
137 #define __VARIANT_NAME_1 n1
138 #define __VARIANT_NAME_2 n2
139 #define __VARIANT_NAME_3 n3
142 #define __VARIANT_NAME_1
143 #define __VARIANT_NAME_2
144 #define __VARIANT_NAME_3
147 typedef struct tagVARIANT VARIANT, *LPVARIANT;
148 typedef struct tagVARIANT VARIANTARG, *LPVARIANTARG;
160 union /* DUMMYUNIONNAME */
173 VARIANT_BOOL boolVal;
193 VARIANT_BOOL* pboolVal;
202 IDispatch** ppdispVal;
212 typedef DWORD HREFTYPE;
213 typedef DISPID MEMBERID;
215 #define DISPATCH_METHOD 0x1
216 #define DISPATCH_PROPERTYGET 0x2
217 #define DISPATCH_PROPERTYPUT 0x4
218 #define DISPATCH_PROPERTYPUTREF 0x8
220 #define DISPID_UNKNOWN ( -1 )
221 #define DISPID_VALUE ( 0 )
222 #define DISPID_PROPERTYPUT ( -3 )
223 #define DISPID_NEWENUM ( -4 )
224 #define DISPID_EVALUATE ( -5 )
225 #define DISPID_CONSTRUCTOR ( -6 )
226 #define DISPID_DESTRUCTOR ( -7 )
227 #define DISPID_COLLECT ( -8 )
229 #define MEMBERID_NIL DISPID_UNKNOWN
231 #define IMPLTYPEFLAG_FDEFAULT (0x1)
232 #define IMPLTYPEFLAG_FSOURCE (0x2)
233 #define IMPLTYPEFLAG_FRESTRICTED (0x4)
234 #define IMPLTYPEFLAG_FDEFAULTVTABLE (0x8)
236 typedef struct tagDISPPARAMS
239 DISPID* rgdispidNamedArgs;
244 typedef struct tagEXCEPINFO
249 BSTR bstrDescription;
253 HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);
255 } EXCEPINFO, * LPEXCEPINFO;
257 typedef struct tagIDLDESC
263 typedef struct tagPARAMDESCEX
266 VARIANTARG varDefaultValue;
267 } PARAMDESCEX, *LPPARAMDESCEX;
269 typedef struct tagPARAMDESC
271 LPPARAMDESCEX pparamdescex;
275 #define PARAMFLAG_NONE (0x00)
276 #define PARAMFLAG_FIN (0x01)
277 #define PARAMFLAG_FOUT (0x02)
278 #define PARAMFLAG_FLCID (0x04)
279 #define PARAMFLAG_FRETVAL (0x08)
280 #define PARAMFLAG_FOPT (0x10)
281 #define PARAMFLAG_FHASDEFAULT (0x20)
282 #define PARAMFLAG_FHASCUSTDATA (0x40)
284 typedef struct tagTYPEDESC
287 struct tagTYPEDESC *lptdesc;
288 struct tagARRAYDESC *lpadesc;
294 typedef struct tagELEMDESC
301 } ELEMDESC, *LPELEMDESC;
303 typedef enum tagTYPEKIND
316 typedef struct tagTYPEATTR
321 MEMBERID memidConstructor;
322 MEMBERID memidDestructor;
323 LPOLESTR lpstrSchema;
324 ULONG cbSizeInstance;
336 } TYPEATTR, *LPTYPEATTR;
338 typedef enum tagTYPEFLAGS {
339 TYPEFLAG_FAPPOBJECT = 0x01,
340 TYPEFLAG_FCANCREATE = 0x02,
341 TYPEFLAG_FLICENSED = 0x04,
342 TYPEFLAG_FPREDECLID = 0x08,
343 TYPEFLAG_FHIDDEN = 0x10,
344 TYPEFLAG_FCONTROL = 0x20,
345 TYPEFLAG_FDUAL = 0x40,
346 TYPEFLAG_FNONEXTENSIBLE = 0x80,
347 TYPEFLAG_FOLEAUTOMATION = 0x100,
348 TYPEFLAG_FRESTRICTED = 0x200,
349 TYPEFLAG_FAGGREGATABLE = 0x400,
350 TYPEFLAG_FREPLACEABLE = 0x800,
351 TYPEFLAG_FDISPATCHABLE = 0x1000,
352 TYPEFLAG_FREVERSEBIND = 0x2000,
353 TYPEFLAG_FPROXY = 0x4000
356 typedef struct tagARRAYDESC
360 SAFEARRAYBOUND rgbounds[1];
363 typedef enum tagFUNCKIND
366 FUNC_PUREVIRTUAL = 1,
372 typedef enum tagFUNCFLAGS
374 FUNCFLAG_FRESTRICTED = 0x1,
375 FUNCFLAG_FSOURCE = 0x2,
376 FUNCFLAG_FBINDABLE = 0x4,
377 FUNCFLAG_FREQUESTEDIT = 0x8,
378 FUNCFLAG_FDISPLAYBIND = 0x10,
379 FUNCFLAG_FDEFAULTBIND = 0x20,
380 FUNCFLAG_FHIDDEN = 0x40,
381 FUNCFLAG_FUSESGETLASTERROR = 0x80,
382 FUNCFLAG_FDEFAULTCOLLELEM = 0x100,
383 FUNCFLAG_FUIDEFAULT = 0x200,
384 FUNCFLAG_FNONBROWSABLE = 0x400,
385 FUNCFLAG_FREPLACEABLE = 0x800,
386 FUNCFLAG_FIMMEDIATEBIND = 0x1000
389 typedef enum tagINVOKEKIND
392 INVOKE_PROPERTYGET = 2,
393 INVOKE_PROPERTYPUT = 4,
394 INVOKE_PROPERTYPUTREF = 8
397 typedef struct tagFUNCDESC
401 ELEMDESC *lprgelemdescParam;
409 ELEMDESC elemdescFunc;
411 } FUNCDESC, *LPFUNCDESC;
413 typedef enum tagVARKIND
421 typedef struct tagVARDESC
424 LPOLESTR lpstrSchema;
429 ELEMDESC elemdescVar;
432 } VARDESC, *LPVARDESC;
434 typedef enum tagSYSKIND
441 typedef enum tagLIBFLAGS
443 LIBFLAG_FRESTRICTED = 0x1,
444 LIBFLAG_FCONTROL = 0x2,
445 LIBFLAG_FHIDDEN = 0x4,
446 LIBFLAG_FHASDISKIMAGE = 0x8
449 typedef struct tagTLIBATTR
457 } TLIBATTR, *LPTLIBATTR;
459 typedef enum tagDESCKIND
462 DESCKIND_FUNCDESC = 1,
463 DESCKIND_VARDESC = 2,
464 DESCKIND_TYPECOMP = 3,
465 DESCKIND_IMPLICITAPPOBJ = 4,
469 typedef union tagBINDPTR
471 FUNCDESC *lpfuncdesc;
474 } BINDPTR, *LPBINDPTR;
476 typedef enum tagVARFLAGS
478 VARFLAG_FREADONLY = 0x1,
479 VARFLAG_FSOURCE = 0x2,
480 VARFLAG_FBINDABLE = 0x4,
481 VARFLAG_FREQUESTEDIT = 0x8,
482 VARFLAG_FDISPLAYBIND = 0x10,
483 VARFLAG_FDEFAULTBIND = 0x20,
484 VARFLAG_FHIDDEN = 0x40,
485 VARFLAG_FRESTRICTED = 0x80,
486 VARFLAG_FDEFAULTCOLLELEM = 0x100,
487 VARFLAG_FUIDEFAULT = 0x200,
488 VARFLAG_FNONBROWSABLE = 0x400,
489 VARFLAG_FREPLACEABLE = 0x800,
490 VARFLAG_FIMMEDIATEBIND = 0x1000
495 * Data types for Variants.
535 VT_STREAMED_OBJECT = 68,
536 VT_STORED_OBJECT = 69,
543 VT_RESERVED = 0x8000,
545 VT_ILLEGALMASKED = 0xfff,
549 /* the largest valide type
551 #define VT_MAXVALIDTYPE VT_CLSID
555 * Declarations of the VARIANT structure and the VARIANT APIs.
559 * DISP_E_BADVARTYPE : The variant type vt in not a valid type of variant.
560 * DISP_E_OVERFLOW : The data pointed to by pvarSrc does not fit in the destination type.
561 * DISP_E_TYPEMISMATCH : The variant type vt is not a valid type of variant.
562 * E_INVALIDARG : One argument is invalid.
563 * E_OUTOFMEMORY : Memory could not be allocated for the conversion.
564 * DISP_E_ARRAYISLOCKED : The variant contains an array that is locked.
568 typedef struct tagCUSTDATAITEM {
571 } CUSTDATAITEM, *LPCUSTDATAITEM;
573 typedef struct tagCUSTDATA {
575 LPCUSTDATAITEM prgCustData; /* count cCustdata */
576 } CUSTDATA, *LPCUSTDATA;
580 /*****************************************************************************
581 * IDispatch interface
583 #define ICOM_INTERFACE IDispatch
584 #define IDispatch_METHODS \
585 ICOM_METHOD1(HRESULT, GetTypeInfoCount, UINT*, pctinfo) \
586 ICOM_METHOD3(HRESULT, GetTypeInfo, UINT, iTInfo, LCID, lcid, ITypeInfo**, ppTInfo) \
587 ICOM_METHOD5(HRESULT, GetIDsOfNames, REFIID, riid, LPOLESTR*, rgszNames, UINT, cNames, LCID, lcid, DISPID*, rgDispId) \
588 ICOM_METHOD8(HRESULT, Invoke, DISPID, dispIdMember, REFIID, riid, LCID, lcid, WORD, wFlags, DISPPARAMS*, pDispParams, VARIANT*, pVarResult, EXCEPINFO*, pExepInfo, UINT*, puArgErr)
589 #define IDispatch_IMETHODS \
592 ICOM_DEFINE(IDispatch,IUnknown)
593 #undef ICOM_INTERFACE
595 /*** IUnknown methods ***/
596 #define IDispatch_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
597 #define IDispatch_AddRef(p) ICOM_CALL (AddRef,p)
598 #define IDispatch_Release(p) ICOM_CALL (Release,p)
599 /*** IDispatch methods ***/
600 #define IDispatch_GetTypeInfoCount(p,a) ICOM_CALL1 (GetTypeInfoCount,p,a)
601 #define IDispatch_GetTypeInfo(p,a,b,c) ICOM_CALL3 (GetTypeInfo,p,a,b,c)
602 #define IDispatch_GetIDsOfNames(p,a,b,c,d,e) ICOM_CALL5 (GetIDsOfNames,p,a,b,c,d,e)
603 #define IDispatch_Invoke(p,a,b,c,d,e,f,g,h) ICOM_CALL8 (Invoke,p,a,b,c,d,e,f,g,h)
606 /*****************************************************************************
607 * ITypeInfo interface
609 #define ICOM_INTERFACE ITypeInfo
610 #define ITypeInfo_METHODS \
611 ICOM_METHOD1(HRESULT,GetTypeAttr, TYPEATTR**,ppTypeAttr) \
612 ICOM_METHOD1(HRESULT,GetTypeComp, ITypeComp**,ppTComp) \
613 ICOM_METHOD2(HRESULT,GetFuncDesc, UINT,index, FUNCDESC**,ppFuncDesc) \
614 ICOM_METHOD2(HRESULT,GetVarDesc, UINT,index, VARDESC**,ppVarDesc) \
615 ICOM_METHOD4(HRESULT,GetNames, MEMBERID,memid, BSTR*,rgBstrNames, UINT,cMaxNames, UINT*,pcNames) \
616 ICOM_METHOD2(HRESULT,GetRefTypeOfImplType, UINT,index, HREFTYPE*, pRefType) \
617 ICOM_METHOD2(HRESULT,GetImplTypeFlags, UINT,index, INT*,pImplTypeFlags)\
618 ICOM_METHOD3(HRESULT,GetIDsOfNames, LPOLESTR*,rgszNames, UINT,cNames, MEMBERID*,pMemId) \
619 ICOM_METHOD7(HRESULT,Invoke, PVOID,pvInstance, MEMBERID,memid, WORD,wFlags, DISPPARAMS*,pDispParams, VARIANT*,pVarResult, EXCEPINFO*,pExcepInfo, UINT*,puArgErr) \
620 ICOM_METHOD5(HRESULT,GetDocumentation, MEMBERID,memid, BSTR*,pBstrName, BSTR*,pBstrDocString, DWORD*,pdwHelpContext, BSTR*,pBstrHelpFile) \
621 ICOM_METHOD5(HRESULT,GetDllEntry, MEMBERID,memid, INVOKEKIND,invKind, BSTR*,pBstrDllName, BSTR*,pBstrName, WORD*,pwOrdinal) \
622 ICOM_METHOD2(HRESULT,GetRefTypeInfo, HREFTYPE,hRefType, ITypeInfo**,ppTInfo) \
623 ICOM_METHOD3(HRESULT,AddressOfMember, MEMBERID,memid, INVOKEKIND,invKind, PVOID*,ppv) \
624 ICOM_METHOD3(HRESULT,CreateInstance, IUnknown*,pUnkOuter, REFIID,riid, PVOID*,ppvObj) \
625 ICOM_METHOD2(HRESULT,GetMops, MEMBERID,memid, BSTR*,pBstrMops) \
626 ICOM_METHOD2(HRESULT,GetContainingTypeLib, ITypeLib**,ppTLib, UINT*,pIndex) \
627 ICOM_METHOD1(HRESULT,ReleaseTypeAttr, TYPEATTR*,pTypeAttr) \
628 ICOM_METHOD1(HRESULT,ReleaseFuncDesc, FUNCDESC*,pFuncDesc) \
629 ICOM_METHOD1(HRESULT,ReleaseVarDesc, VARDESC*,pVarDesc)
631 #define ITypeInfo_IMETHODS \
634 ICOM_DEFINE(ITypeInfo,IUnknown)
635 #undef ICOM_INTERFACE
637 /*** IUnknown methods ***/
638 #define ITypeInfo_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
639 #define ITypeInfo_AddRef(p) ICOM_CALL (AddRef,p)
640 #define ITypeInfo_Release(p) ICOM_CALL (Release,p)
641 /*** ITypeInfo methods ***/
642 #define ITypeInfo_GetTypeAttr(p,a) ICOM_CALL1(GetTypeAttr,p,a)
643 #define ITypeInfo_GetTypeComp(p,a) ICOM_CALL1(GetTypeComp,p,a)
644 #define ITypeInfo_GetFuncDesc(p,a,b) ICOM_CALL2(GetFuncDesc,p,a,b)
645 #define ITypeInfo_GetVarDesc(p,a,b) ICOM_CALL2(GetVarDesc,p,a,b)
646 #define ITypeInfo_GetNames(p,a,b,c,d) ICOM_CALL4(GetNames,p,a,b,c,d)
647 #define ITypeInfo_GetRefTypeOfImplType(p,a,b) ICOM_CALL2(GetRefTypeOfImplType,p,a,b)
648 #define ITypeInfo_GetImplTypeFlags(p,a,b) ICOM_CALL2(GetImplTypeFlags,p,a,b)
649 #define ITypeInfo_GetIDsOfNames(p,a,b,c) ICOM_CALL3(GetIDsOfNames,p,a,b,c)
650 #define ITypeInfo_Invoke(p,a,b,c,d,e,f,g) ICOM_CALL7(Invoke,p,a,b,c,d,e,f,g)
651 #define ITypeInfo_GetDocumentation(p,a,b,c,d,e) ICOM_CALL5(GetDocumentation,p,a,b,c,d,e)
652 #define ITypeInfo_GetDllEntry(p,a,b,c,d,e) ICOM_CALL5(GetDllEntry,p,a,b,c,d,e)
653 #define ITypeInfo_GetRefTypeInfo(p,a,b) ICOM_CALL2(GetRefTypeInfo,p,a,b)
654 #define ITypeInfo_AddressOfMember(p,a,b,c) ICOM_CALL3(AddressOfMember,p,a,b,c)
655 #define ITypeInfo_CreateInstance(p,a,b,c) ICOM_CALL3(CreateInstance,p,a,b,c)
656 #define ITypeInfo_GetMops(p,a,b) ICOM_CALL2(GetMops,p,a,b)
657 #define ITypeInfo_GetContainingTypeLib(p,a,b) ICOM_CALL2(GetContainingTypeLib,p,a,b)
658 #define ITypeInfo_ReleaseTypeAttr(p,a) ICOM_CALL1(ReleaseTypeAttr,p,a)
659 #define ITypeInfo_ReleaseFuncDesc(p,a) ICOM_CALL1(ReleaseFuncDesc,p,a)
660 #define ITypeInfo_ReleaseVarDesc(p,a) ICOM_CALL1(ReleaseVarDesc,p,a)
663 /*****************************************************************************
664 * ITypeInfo2 interface
666 #define ICOM_INTERFACE ITypeInfo2
667 #define ITypeInfo2_METHODS \
668 ICOM_METHOD1(HRESULT, GetTypeKind, TYPEKIND*, pTypeKind) \
669 ICOM_METHOD1(HRESULT, GetTypeFlags, UINT*, pTypeFlags) \
670 ICOM_METHOD3(HRESULT, GetFuncIndexOfMemId, MEMBERID, memid, INVOKEKIND,\
671 invKind, UINT*, pFuncIndex) \
672 ICOM_METHOD2(HRESULT, GetVarIndexOfMemId, MEMBERID, memid, UINT*, \
674 ICOM_METHOD2(HRESULT, GetCustData, REFGUID, guid, VARIANT*, pVarVal) \
675 ICOM_METHOD3(HRESULT, GetFuncCustData, UINT, index, REFGUID, guid,\
677 ICOM_METHOD4(HRESULT, GetParamCustData, UINT, indexFunc, UINT,\
678 indexParam, REFGUID, guid, VARIANT*, pVarVal) \
679 ICOM_METHOD3(HRESULT, GetVarCustData, UINT, index, REFGUID, guid,\
681 ICOM_METHOD3(HRESULT, GetImplTypeCustData, UINT, index, REFGUID, guid,\
683 ICOM_METHOD5(HRESULT, GetDocumentation2, MEMBERID, memid, LCID, lcid,\
684 BSTR*, pbstrHelpString, DWORD*, pdwHelpStringContext,\
685 BSTR*, pbstrHelpStringDll) \
686 ICOM_METHOD1(HRESULT, GetAllCustData, CUSTDATA*, pCustData) \
687 ICOM_METHOD2(HRESULT, GetAllFuncCustData, UINT, index, CUSTDATA*,\
689 ICOM_METHOD3(HRESULT, GetAllParamCustData, UINT, indexFunc, UINT,\
690 indexParam, CUSTDATA*, pCustData) \
691 ICOM_METHOD2(HRESULT, GetAllVarCustData, UINT, index, CUSTDATA*,\
693 ICOM_METHOD2(HRESULT, GetAllImplTypeCustData, UINT, index, CUSTDATA*,\
696 #define ITypeInfo2_IMETHODS \
700 ICOM_DEFINE(ITypeInfo2,ITypeInfo)
701 #undef ICOM_INTERFACE
703 /*** IUnknown methods ***/
704 #define ITypeInfo2_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
705 #define ITypeInfo2_AddRef(p) ICOM_CALL (AddRef,p)
706 #define ITypeInfo2_Release(p) ICOM_CALL (Release,p)
707 /*** ITypeInfo methods ***/
708 #define ITypeInfo2_GetTypeAttr(p,a) ICOM_CALL1(GetTypeAttr,p,a)
709 #define ITypeInfo2_GetTypeComp(p,a) ICOM_CALL1(GetTypeComp,p,a)
710 #define ITypeInfo2_GetFuncDesc(p,a,b) ICOM_CALL2(GetFuncDesc,p,a,b)
711 #define ITypeInfo2_GetVarDesc(p,a,b) ICOM_CALL2(GetVarDesc,p,a,b)
712 #define ITypeInfo2_GetNames(p,a,b,c,d) ICOM_CALL4(GetNames,p,a,b,c,d)
713 #define ITypeInfo2_GetRefTypeOfImplType(p,a,b) ICOM_CALL2(GetRefTypeOfImplType,p,a,b)
714 #define ITypeInfo2_GetImplTypeFlags(p,a,b) ICOM_CALL2(GetImplTypeFlags,p,a,b)
715 #define ITypeInfo2_GetIDsOfNames(p,a,b,c) ICOM_CALL3(GetIDsOfNames,p,a,b,c)
716 #define ITypeInfo2_Invoke(p,a,b,c,d,e,f,g) ICOM_CALL7(Invoke,p,a,b,c,d,e,f,g)
717 #define ITypeInfo2_GetDocumentation(p,a,b,c,d,e) ICOM_CALL5(GetDocumentation,p,a,b,c,d,e)
718 #define ITypeInfo2_GetDllEntry(p,a,b,c,d,e) ICOM_CALL5(GetDllEntry,p,a,b,c,d,e)
719 #define ITypeInfo2_GetRefTypeInfo(p,a,b) ICOM_CALL2(GetRefTypeInfo,p,a,b)
720 #define ITypeInfo2_AddressOfMember(p,a,b,c) ICOM_CALL3(AddressOfMember,p,a,b,c)
721 #define ITypeInfo2_CreateInstance(p,a,b,c) ICOM_CALL3(CreateInstance,p,a,b,c)
722 #define ITypeInfo2_GetMops(p,a,b) ICOM_CALL2(GetMops,p,a,b)
723 #define ITypeInfo2_GetContainingTypeLib(p,a,b) ICOM_CALL2(GetContainingTypeLib,p,a,b)
724 #define ITypeInfo2_ReleaseTypeAttr(p,a) ICOM_CALL1(ReleaseTypeAttr,p,a)
725 #define ITypeInfo2_ReleaseFuncDesc(p,a) ICOM_CALL1(ReleaseFuncDesc,p,a)
726 #define ITypeInfo2_ReleaseVarDesc(p,a) ICOM_CALL1(ReleaseVarDesc,p,a)
727 /*** ITypeInfo2 methods ***/
728 #define ITypeInfo2_GetTypeKind(p,a) ICOM_CALL1(GetTypeKind,p,a)
729 #define ITypeInfo2_GetTypeFlags(p,a) ICOM_CALL1(GetTypeFlags,p,a)
730 #define ITypeInfo2_GetFuncIndexOfMemId(p,a,b,c) ICOM_CALL3(GetFuncIndexOfMemId,p,a,b,c)
731 #define ITypeInfo2_GetVarIndexOfMemId(p,a,b) ICOM_CALL2(GetVarIndexOfMemId,p,a,b)
732 #define ITypeInfo2_GetCustData(p,a,b) ICOM_CALL2(GetCustData,p,a,b)
733 #define ITypeInfo2_GetFuncCustData(p,a,b,c) ICOM_CALL3(GetFuncCustData,p,a,b,c)
734 #define ITypeInfo2_GetParamCustData(p,a,b,c,d) ICOM_CALL4(GetParamCustData,p,a,b,c,d)
735 #define ITypeInfo2_GetVarCustData(p,a,b,c) ICOM_CALL3(GetVarCustData,p,a,b,c)
736 #define ITypeInfo2_GetImplTypeCustData(p,a,b,c) ICOM_CALL3(GetImplTypeCustData,p,a,b,c)
737 #define ITypeInfo2_GetDocumentation2(p,a,b,c,d,e) ICOM_CALL5(GetDocumentation2,p,a,b,c,d,e)
738 #define ITypeInfo2_GetAllCustData(p,a) ICOM_CALL1(GetAllCustData,p,a)
739 #define ITypeInfo2_GetAllFuncCustData(p,a,b) ICOM_CALL2(GetAllFuncCustData,p,a,b)
740 #define ITypeInfo2_GetAllParamCustData(p,a,b,c) ICOM_CALL3(GetAllParamCustData,p,a,b,c)
741 #define ITypeInfo2_GetAllVarCustData(p,a,b) ICOM_CALL2(GetAllVarCustData,p,a,b)
742 #define ITypeInfo2_GetAllImplTypeCustData(p,a,b) ICOM_CALL2(GetAllImplTypeCustData,p,a,b)
744 /*****************************************************************************
747 #define ICOM_INTERFACE ITypeLib
748 #define ITypeLib_METHODS \
749 ICOM_METHOD (UINT,GetTypeInfoCount) \
750 ICOM_METHOD2(HRESULT,GetTypeInfo, UINT,index, ITypeInfo**,ppTInfo) \
751 ICOM_METHOD2(HRESULT,GetTypeInfoType, UINT,index, TYPEKIND*,pTKind) \
752 ICOM_METHOD2(HRESULT,GetTypeInfoOfGuid, REFGUID,guid, ITypeInfo**,ppTinfo) \
753 ICOM_METHOD1(HRESULT,GetLibAttr, TLIBATTR**,ppTLibAttr) \
754 ICOM_METHOD1(HRESULT,GetTypeComp, ITypeComp**,ppTComp) \
755 ICOM_METHOD5(HRESULT,GetDocumentation, INT,index, BSTR*,pBstrName, BSTR*,pBstrDocString, DWORD*,pdwHelpContext, BSTR*,pBstrHelpFile) \
756 ICOM_METHOD3(HRESULT,IsName, LPOLESTR,szNameBuf, ULONG,lHashVal, BOOL*,bfName) \
757 ICOM_METHOD5(HRESULT,FindName, LPOLESTR,szNameBuf, ULONG,lHashVal, ITypeInfo**,ppTInfo, MEMBERID*,rgMemId, USHORT*,pcFound) \
758 ICOM_METHOD1(VOID,ReleaseTLibAttr, TLIBATTR*,pTLibAttr)
759 #define ITypeLib_IMETHODS \
762 ICOM_DEFINE(ITypeLib,IUnknown)
763 #undef ICOM_INTERFACE
765 /*** IUnknown methods ***/
766 #define ITypeLib_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
767 #define ITypeLib_AddRef(p) ICOM_CALL (AddRef,p)
768 #define ITypeLib_Release(p) ICOM_CALL (Release,p)
769 /*** ITypeLib methods ***/
770 #define ITypeLib_GetTypeInfoCount(p) ICOM_CALL (GetTypeInfoCount,p)
771 #define ITypeLib_GetTypeInfo(p,a,b) ICOM_CALL2(GetTypeInfo,p,a,b)
772 #define ITypeLib_GetTypeInfoType(p,a,b) ICOM_CALL2(GetTypeInfoType,p,a,b)
773 #define ITypeLib_GetTypeInfoOfGuid(p,a,b) ICOM_CALL2(GetTypeInfoOfGuid,p,a,b)
774 #define ITypeLib_GetLibAttr(p,a) ICOM_CALL1(GetLibAttr,p,a)
775 #define ITypeLib_GetTypeComp(p,a) ICOM_CALL1(GetTypeComp,p,a)
776 #define ITypeLib_GetDocumentation(p,a,b,c,d,e) ICOM_CALL5(GetDocumentation,p,a,b,c,d,e)
777 #define ITypeLib_IsName(p,a,b,c) ICOM_CALL3(IsName,p,a,b,c)
778 #define ITypeLib_FindName(p,a,b,c,d,e) ICOM_CALL5(FindName,p,a,b,c,d,e)
779 #define ITypeLib_ReleaseTLibAttr(p,a) ICOM_CALL1(ReleaseTLibAttr,p,a)
782 /*****************************************************************************
783 * ITypeLib2 interface
785 #define ICOM_INTERFACE ITypeLib2
786 #define ITypeLib2_METHODS \
787 ICOM_METHOD2(HRESULT, GetCustData, REFGUID, guid, VARIANT*, pVarVal) \
788 ICOM_METHOD2(HRESULT, GetLibStatistics, ULONG *, pcUniqueNames, ULONG*,pcchUniqueNames) \
789 ICOM_METHOD5(HRESULT, GetDocumentation2, INT, index, LCID, lcid,BSTR*, pbstrHelpString, DWORD*, pdwHelpStringContext, BSTR*, strHelpStringDll) \
790 ICOM_METHOD1(HRESULT, GetAllCustData, CUSTDATA *, pCustData)
791 #define ITypeLib2_IMETHODS \
795 ICOM_DEFINE(ITypeLib2,ITypeLib)
796 #undef ICOM_INTERFACE
798 /*** IUnknown methods ***/
799 #define ITypeLib2_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
800 #define ITypeLib2_AddRef(p) ICOM_CALL (AddRef,p)
801 #define ITypeLib2_Release(p) ICOM_CALL (Release,p)
802 /*** ITypeLib methods ***/
803 #define ITypeLib2_GetTypeInfoCount(p) ICOM_CALL (GetTypeInfoCount,p)
804 #define ITypeLib2_GetTypeInfo(p,a,b) ICOM_CALL2(GetTypeInfo,p,a,b)
805 #define ITypeLib2_GetTypeInfoType(p,a,b) ICOM_CALL2(GetTypeInfoType,p,a,b)
806 #define ITypeLib2_GetTypeInfoOfGuid(p,a,b) ICOM_CALL2(GetTypeInfoOfGuid,p,a,b)
807 #define ITypeLib2_GetLibAttr(p,a) ICOM_CALL1(GetLibAttr,p,a)
808 #define ITypeLib2_GetTypeComp(p,a) ICOM_CALL1(GetTypeComp,p,a)
809 #define ITypeLib2_GetDocumentation(p,a,b,c,d,e) ICOM_CALL5(GetDocumentation,p,a,b,c,d,e)
810 #define ITypeLib2_IsName(p,a,b,c) ICOM_CALL3(IsName,p,a,b,c)
811 #define ITypeLib2_FindName(p,a,b,c,d,e) ICOM_CALL5(FindName,p,a,b,c,d,e)
812 #define ITypeLib2_ReleaseTLibAttr(p,a) ICOM_CALL1(ReleaseTLibAttr,p,a)
813 /*** ITypeLib2 methods ***/
814 #define ITypeLib2_GetCustData(p,a,b) ICOM_CALL2(GetCustData,p,a,b)
815 #define ITypeLib2_GetLibStatistics(p,a,b) ICOM_CALL2(GetLibStatistics,p,a,b)
816 #define ITypeLib2_GetDocumentation2(p,a,b,c,d,e,f) ICOM_CALL5(GetDocumentation2,p,a,b,c,d,e)
817 #define ITypeLib2_GetAllCustData(p,a) ICOM_CALL1(GetAllCustData,p,a)
819 /*****************************************************************************
820 * ITypeComp interface
822 #define ICOM_INTERFACE ITypeComp
823 #define ITypeComp_METHODS \
824 ICOM_METHOD6(HRESULT,Bind, LPOLESTR,szName, ULONG,lHashVal, WORD,wFlags, ITypeInfo**,ppTInfo, DESCKIND*,pDescKind, BINDPTR*,pBindPtr) \
825 ICOM_METHOD4(HRESULT,BindType, LPOLESTR,szName, ULONG,lHashVal, ITypeInfo**,ppTInfo, ITypeComp**,ppTComp)
826 #define ITypeComp_IMETHODS \
829 ICOM_DEFINE(ITypeComp,IUnknown)
830 #undef ICOM_INTERFACE
832 /*** IUnknown methods ***/
833 #define ITypeComp_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
834 #define ITypeComp_AddRef(p) ICOM_CALL (AddRef,p)
835 #define ITypeComp_Release(p) ICOM_CALL (Release,p)
836 /*** ITypeComp methods ***/
837 #define ITypeComp_Bind(p,a,b,c,d,e,f) ICOM_CALL6(Bind,p,a,b,c,d,e,f)
838 #define ITypeComp_BindType(p,a,b,c,d) ICOM_CALL4(BindType,p,a,b,c,d)
840 /*****************************************************************************
841 * IEnumVARIANT interface
843 #define ICOM_INTERFACE IEnumVARIANT
844 #define IEnumVARIANT_METHODS \
845 ICOM_METHOD3(HRESULT,Next, ULONG,celt, VARIANT*,rgVar, ULONG*,pCeltFetched) \
846 ICOM_METHOD1(HRESULT,Skip, ULONG,celt) \
847 ICOM_METHOD (HRESULT,Reset) \
848 ICOM_METHOD1(HRESULT,Clone, IEnumVARIANT**,ppEnum)
849 #define IEnumVARIANT_IMETHODS \
852 ICOM_DEFINE(IEnumVARIANT,IUnknown)
853 #undef ICOM_INTERFACE
855 /*** IUnknown methods ***/
856 #define IEnumVARIANT_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
857 #define IEnumVARIANT_AddRef(p) ICOM_CALL (AddRef,p)
858 #define IEnumVARIANT_Release(p) ICOM_CALL (Release,p)
859 /*** IEnumVARIANT methods ***/
860 #define IEnumVARIANT_Next(p,a,b,c) ICOM_CALL3(Next,p,a,b,c)
861 #define IEnumVARIANT_Skip(p,a) ICOM_CALL1(Skip,p,a)
862 #define IEnumVARIANT_Reset(p) ICOM_CALL (Reset,p)
863 #define IEnumVARIANT_Clone(p,a) ICOM_CALL1(Clone,p,a)
865 #endif /* __WINE_WINE_OBJ_OLEAUT_H */