Added missing __volatile__.
[wine] / include / wine / obj_oleaut.h
1 /*
2  * Defines the COM interfaces and APIs related to OLE automation support.
3  */
4
5 #ifndef __WINE_WINE_OBJ_OLEAUT_H
6 #define __WINE_WINE_OBJ_OLEAUT_H
7
8 #include "wine/obj_base.h"
9
10 /*****************************************************************************
11  * Predeclare the interfaces
12  */
13 DEFINE_OLEGUID(IID_IDispatch,       0x00020400,0,0);
14 typedef struct IDispatch IDispatch,*LPDISPATCH;
15
16 DEFINE_OLEGUID(IID_ITypeInfo,       0x00020401,0,0);
17 typedef struct ITypeInfo ITypeInfo,*LPTYPEINFO;
18
19 DEFINE_OLEGUID(IID_ITypeLib,        0x00020402,0,0);
20 typedef struct ITypeLib ITypeLib,*LPTYPELIB;
21
22 DEFINE_OLEGUID(IID_ITypeComp,       0x00020403,0,0);
23 typedef struct ITypeComp ITypeComp,*LPTYPECOMP;
24
25 DEFINE_OLEGUID(IID_IEnumVARIANT,    0x00020404,0,0);
26 typedef struct IEnumVARIANT IEnumVARIANT,*LPENUMVARIANT;
27
28 DEFINE_OLEGUID(IID_ICreateTypeInfo, 0x00020405,0,0);
29 typedef struct ICreateTypeInfo ICreateTypeInfo,*LPCREATETYPEINFO;
30
31 DEFINE_OLEGUID(IID_ICreateTypeLib,  0x00020406,0,0);
32 typedef struct ICreateTypeLib ICreateTypeLib,*LPCREATETYPELIB;
33
34 DEFINE_OLEGUID(IID_ICreateTypeInfo2,0x0002040E,0,0);
35 typedef struct ICreateTypeInfo2 ICreateTypeInfo2,*LPCREATETYPEINFO2;
36
37 DEFINE_OLEGUID(IID_ICreateTypeLib2, 0x0002040F,0,0);
38 typedef struct ICreateTypeLib2 ICreateTypeLib2,*LPCREATETYPELIB2;
39
40 DEFINE_OLEGUID(IID_ITypeChangeEvents,0x00020410,0,0);
41 typedef struct ITypeChangeEvents ITypeChangeEvents,*LPTYPECHANGEEVENTS;
42
43 DEFINE_OLEGUID(IID_ITypeLib2,       0x00020411,0,0);
44 typedef struct ITypeLib2 ITypeLib2,*LPTYPELIB2;
45
46 DEFINE_OLEGUID(IID_ITypeInfo2,      0x00020412,0,0);
47 typedef struct ITypeInfo2 ITypeInfo2,*LPTYPEINFO2;
48
49 /*****************************************************************************
50  * Automation data types
51  */
52
53 /*****************************************************************
54  *  SafeArray defines and structs 
55  */
56
57 #define FADF_AUTO        ( 0x1 )
58 #define FADF_STATIC      ( 0x2 )
59 #define FADF_EMBEDDED    ( 0x4 )
60 #define FADF_FIXEDSIZE   ( 0x10 )
61 #define FADF_RECORD      ( 0x20 )
62 #define FADF_HAVEIID     ( 0x40 )
63 #define FADF_HAVEVARTYPE ( 0x80 )
64 #define FADF_BSTR        ( 0x100 )
65 #define FADF_UNKNOWN     ( 0x200 )
66 #define FADF_DISPATCH    ( 0x400 )
67 #define FADF_VARIANT     ( 0x800 )
68 #define FADF_RESERVED    ( 0xf008 )
69
70 /* Undocumented flags */                                                                                  
71 #define FADF_CREATEVECTOR ( 0x2000 ) /* set when the safe array is created using SafeArrayCreateVector */ 
72
73
74 typedef struct  tagSAFEARRAYBOUND 
75 {
76   ULONG cElements;                  /* Number of elements in dimension */
77   LONG  lLbound;                    /* Lower bound of dimension */
78 } SAFEARRAYBOUND;
79
80 typedef struct  tagSAFEARRAY
81
82   USHORT          cDims;            /* Count of array dimension */
83   USHORT          fFeatures;        /* Flags describing the array */
84   ULONG           cbElements;       /* Size of each element */
85   ULONG           cLocks;           /* Number of lock on array */
86   PVOID           pvData;           /* Pointer to data valid when cLocks > 0 */
87   SAFEARRAYBOUND  rgsabound[ 1 ];   /* One bound for each dimension */
88 } SAFEARRAY, *LPSAFEARRAY;
89
90 typedef enum tagCALLCONV {
91         CC_CDECL    = 1,
92         CC_MSCPASCAL  = CC_CDECL + 1,
93         CC_PASCAL   = CC_MSCPASCAL,
94         CC_MACPASCAL  = CC_PASCAL + 1,
95         CC_STDCALL    = CC_MACPASCAL + 1,
96         CC_RESERVED   = CC_STDCALL + 1,
97         CC_SYSCALL    = CC_RESERVED + 1,
98         CC_MPWCDECL   = CC_SYSCALL + 1,
99         CC_MPWPASCAL  = CC_MPWCDECL + 1,
100         CC_MAX    = CC_MPWPASCAL + 1
101 } CALLCONV;
102
103 typedef CY CURRENCY;
104
105 /*
106  * Declarations of the VARIANT structure and the VARIANT APIs.
107  */
108 /* S_OK                            : Success.
109  * DISP_E_BADVARTYPE   : The variant type vt in not a valid type of variant.
110  * DISP_E_OVERFLOW         : The data pointed to by pvarSrc does not fit in the destination type.
111  * DISP_E_TYPEMISMATCH : The variant type vt is not a valid type of variant.
112  * E_INVALIDARG            : One argument is invalid.
113  * * E_OUTOFMEMORY     : Memory could not be allocated for the conversion.
114  * DISP_E_ARRAYISLOCKED : The variant contains an array that is locked.
115  */
116
117 typedef struct tagVARIANT VARIANT, *LPVARIANT;
118 typedef struct tagVARIANT VARIANTARG, *LPVARIANTARG;
119
120 struct tagVARIANT {
121         VARTYPE vt;
122         WORD wReserved1;
123         WORD wReserved2;
124         WORD wReserved3;
125         union /* DUMMYUNIONNAME */
126         {
127         /* By value. */
128                 CHAR cVal;
129                 USHORT uiVal;
130                 ULONG ulVal;
131                 INT intVal;
132                 UINT uintVal;
133                 BYTE bVal;
134                 short iVal;
135                 long lVal;
136                 float fltVal;
137                 double dblVal;
138                 VARIANT_BOOL boolVal;
139                 SCODE scode;
140                 DATE date;
141                 BSTR bstrVal;
142                 CY cyVal;
143                 /* DECIMAL decVal; */
144                 IUnknown* punkVal;
145                 IDispatch* pdispVal;
146                 SAFEARRAY* parray;
147
148                 /* By reference */
149                 CHAR* pcVal;
150                 USHORT* puiVal;
151                 ULONG* pulVal;
152                 INT* pintVal;
153                 UINT* puintVal;
154                 BYTE* pbVal;
155                 short* piVal;
156                 long* plVal;
157                 float* pfltVal;
158                 double* pdblVal;
159                 VARIANT_BOOL* pboolVal;
160                 SCODE* pscode;
161                 DATE* pdate;
162                 BSTR* pbstrVal;
163                 VARIANT* pvarVal;
164                 PVOID byref;
165                 CY* pcyVal;
166           /* DECIMAL* pdecVal; */
167                 IUnknown** ppunkVal;
168                 IDispatch** ppdispVal;
169                 SAFEARRAY** pparray;
170         } DUMMYUNIONNAME;
171 };
172
173              
174 typedef LONG DISPID;
175 typedef DWORD HREFTYPE;
176 typedef DISPID MEMBERID;
177
178 #define DISPATCH_METHOD         0x1
179 #define DISPATCH_PROPERTYGET    0x2
180 #define DISPATCH_PROPERTYPUT    0x4
181 #define DISPATCH_PROPERTYPUTREF 0x8
182
183 #define DISPID_UNKNOWN  ( -1 )
184 #define DISPID_VALUE  ( 0 )
185 #define DISPID_PROPERTYPUT  ( -3 )
186 #define DISPID_NEWENUM  ( -4 )
187 #define DISPID_EVALUATE ( -5 )
188 #define DISPID_CONSTRUCTOR  ( -6 )
189 #define DISPID_DESTRUCTOR ( -7 )
190 #define DISPID_COLLECT  ( -8 )
191
192 #define MEMBERID_NIL DISPID_UNKNOWN
193
194 #define IMPLTYPEFLAG_FDEFAULT         (0x1)
195 #define IMPLTYPEFLAG_FSOURCE          (0x2)
196 #define IMPLTYPEFLAG_FRESTRICTED      (0x4)
197 #define IMPLTYPEFLAG_FDEFAULTVTABLE   (0x8)
198
199 typedef struct  tagDISPPARAMS
200 {
201   VARIANTARG* rgvarg;
202   DISPID*     rgdispidNamedArgs;
203   UINT      cArgs;
204   UINT      cNamedArgs;
205 } DISPPARAMS;
206
207 typedef struct tagEXCEPINFO 
208 {
209     WORD  wCode;
210     WORD  wReserved;
211     BSTR  bstrSource;
212     BSTR  bstrDescription;
213     BSTR  bstrHelpFile;
214     DWORD dwHelpContext;
215     PVOID pvReserved;
216     HRESULT __stdcall (*pfnDeferredFillIn)(struct tagEXCEPINFO *);
217     SCODE scode;
218 } EXCEPINFO, * LPEXCEPINFO;
219
220 typedef struct tagIDLDESC
221 {
222         ULONG dwReserved;
223         USHORT wIDLFlags;
224 } IDLDESC;
225
226 typedef struct tagPARAMDESCEX
227 {
228         ULONG cBytes;
229         VARIANTARG varDefaultValue;
230 } PARAMDESCEX, *LPPARAMDESCEX;
231
232 typedef struct tagPARAMDESC
233 {
234         LPPARAMDESCEX pparamdescex;
235         USHORT wParamFlags;
236 } PARAMDESC;
237
238 #define PARAMFLAG_NONE          (0x00)
239 #define PARAMFLAG_FIN           (0x01)
240 #define PARAMFLAG_FOUT          (0x02)
241 #define PARAMFLAG_FLCID         (0x04)
242 #define PARAMFLAG_FRETVAL       (0x08)
243 #define PARAMFLAG_FOPT          (0x10)
244 #define PARAMFLAG_FHASDEFAULT   (0x20)
245
246
247 typedef struct tagTYPEDESC
248 {
249         union {
250                 struct tagTYPEDESC *lptdesc;
251                 struct tagARRAYDESC *lpadesc;
252                 HREFTYPE hreftype;
253         } DUMMYUNIONNAME;
254         VARTYPE vt;
255 } TYPEDESC;
256  
257 typedef struct tagELEMDESC
258 {
259         TYPEDESC tdesc;
260         union {
261                 IDLDESC idldesc;
262                 PARAMDESC paramdesc;
263         } DUMMYUNIONNAME;
264 } ELEMDESC, *LPELEMDESC;
265
266 typedef enum tagTYPEKIND
267 {
268         TKIND_ENUM = 0,
269         TKIND_RECORD = 1,
270         TKIND_MODULE = 2,
271         TKIND_INTERFACE = 3,
272         TKIND_DISPATCH = 4,
273         TKIND_COCLASS = 5,
274         TKIND_ALIAS = 6,
275         TKIND_UNION = 7,
276         TKIND_MAX = 8
277 } TYPEKIND;
278
279 typedef struct tagTYPEATTR
280 {
281         GUID guid;
282         LCID lcid;
283         DWORD dwReserved;
284         MEMBERID memidConstructor;
285         MEMBERID memidDestructor;
286         LPOLESTR lpstrSchema;
287         ULONG cbSizeInstance;
288         TYPEKIND typekind;
289         WORD cFuncs;
290         WORD cVars;
291         WORD cImplTypes;
292         WORD cbSizeVft;
293         WORD cbAlignment;
294         WORD wTypeFlags;
295         WORD wMajorVerNum;
296         WORD wMinorVerNum;
297         TYPEDESC tdescAlias;
298         IDLDESC idldescType;
299 } TYPEATTR, *LPTYPEATTR;
300
301 typedef struct tagARRAYDESC
302 {
303         TYPEDESC tdescElem;
304         USHORT cDims;
305         SAFEARRAYBOUND rgbounds[1];
306 } ARRAYDESC;
307
308 typedef enum tagFUNCKIND
309 {
310         FUNC_VIRTUAL = 0,
311         FUNC_PUREVIRTUAL = 1,
312         FUNC_NONVIRTUAL = 2,
313         FUNC_STATIC = 3,
314         FUNC_DISPATCH = 4
315 } FUNCKIND;
316
317 typedef enum tagINVOKEKIND
318 {
319         INVOKE_FUNC = 1,
320         INVOKE_PROPERTYGET = 2,
321         INVOKE_PROPERTYPUT = 3,
322         INVOKE_PROPERTYPUTREF = 4
323 } INVOKEKIND;
324
325 typedef struct tagFUNCDESC
326 {
327         MEMBERID memid;
328         SCODE *lprgscode;
329         ELEMDESC *lprgelemdescParam;
330         FUNCKIND funckind;
331         INVOKEKIND invkind;
332         CALLCONV callconv;
333         SHORT cParams;
334         SHORT cParamsOpt;
335         SHORT oVft;
336         SHORT cScodes;
337         ELEMDESC elemdescFunc;
338         WORD wFuncFlags;
339 } FUNCDESC, *LPFUNCDESC;
340
341 typedef enum tagVARKIND
342 {
343         VAR_PERINSTANCE = 0,
344         VAR_STATIC = 1,
345         VAR_CONST = 2,
346         VAR_DISPATCH = 3
347 } VARKIND;
348
349 typedef struct tagVARDESC
350 {
351         MEMBERID memid;
352         LPOLESTR lpstrSchema;
353         union {
354                 ULONG oInst;
355                 VARIANT *lpvarValue;
356         } DUMMYUNIONNAME;
357         ELEMDESC elemdescVar;
358         WORD wVarFlags;
359         VARKIND varkind;
360 } VARDESC, *LPVARDESC;
361
362 typedef enum tagSYSKIND
363 {
364         SYS_WIN16 = 0,
365         SYS_WIN32 = 1,
366         SYS_MAC = 2
367 } SYSKIND;
368
369 typedef enum tagLIBFLAGS
370 {
371         LIBFLAG_FRESTRICTED = 0x1,
372         LIBFLAG_FCONTROL = 0x2,
373         LIBFLAG_FHIDDEN = 0x4,
374         LIBFLAG_FHASDISKIMAGE = 0x8
375 } LIBFLAGS;
376
377 typedef struct tagTLIBATTR
378 {
379         GUID guid;
380         LCID lcid;
381         SYSKIND syskind;
382         WORD wMajorVerNum;
383         WORD wMinorVerNum;
384         WORD wLibFlags;
385 } TLIBATTR, *LPTLIBATTR;
386
387 typedef enum tagDESCKIND
388 {
389         DESCKIND_NONE = 0,
390         DESCKIND_FUNCDESC = 1,
391         DESCKIND_VARDESC = 2,
392         DESCKIND_TYPECOMP = 3,
393         DESCKIND_IMPLICITAPPOBJ = 4,
394         DESCKIND_MAX = 6
395 } DESCKIND;
396
397 typedef union tagBINDPTR
398 {
399         FUNCDESC *lpfuncdesc;
400         VARDESC  *lpvardesc;
401         ITypeComp *lptcomp;
402 } BINDPTR, *LPBINDPTR;
403
404 typedef enum tagVARFLAGS
405 {
406         VARFLAG_FREADONLY = 0x1,
407         VARFLAG_FSOURCE = 0x2,
408         VARFLAG_FBINDABLE = 0x4,
409         VARFLAG_FREQUESTEDIT  = 0x8,
410         VARFLAG_FDISPLAYBIND  = 0x10,
411         VARFLAG_FDEFAULTBIND  = 0x20,
412         VARFLAG_FHIDDEN = 0x40,
413         VARFLAG_FRESTRICTED = 0x80,
414         VARFLAG_FDEFAULTCOLLELEM  = 0x100,
415         VARFLAG_FUIDEFAULT  = 0x200,
416         VARFLAG_FNONBROWSABLE = 0x400,
417         VARFLAG_FREPLACEABLE  = 0x800,
418         VARFLAG_FIMMEDIATEBIND  = 0x1000
419 } VARFLAGS;
420
421
422 /*
423  * Data types for Variants.
424  */
425
426 enum VARENUM {
427         VT_EMPTY = 0,
428         VT_NULL = 1,
429         VT_I2 = 2,
430         VT_I4 = 3,
431         VT_R4 = 4,
432         VT_R8 = 5,
433         VT_CY = 6,
434         VT_DATE = 7,
435         VT_BSTR = 8,
436         VT_DISPATCH = 9,
437         VT_ERROR  = 10,
438         VT_BOOL = 11,
439         VT_VARIANT      = 12,
440         VT_UNKNOWN      = 13,
441         VT_DECIMAL      = 14,
442         VT_I1 = 16,
443         VT_UI1  = 17,
444         VT_UI2  = 18,
445         VT_UI4  = 19,
446         VT_I8 = 20,
447         VT_UI8  = 21,
448         VT_INT  = 22,
449         VT_UINT = 23,
450         VT_VOID = 24,
451         VT_HRESULT      = 25,
452         VT_PTR  = 26,
453         VT_SAFEARRAY  = 27,
454         VT_CARRAY = 28,
455         VT_USERDEFINED  = 29,
456         VT_LPSTR  = 30,
457         VT_LPWSTR = 31,
458         VT_RECORD = 36,
459         VT_FILETIME = 64,
460         VT_BLOB = 65,
461         VT_STREAM = 66,
462         VT_STORAGE      = 67,
463         VT_STREAMED_OBJECT      = 68,
464         VT_STORED_OBJECT  = 69,
465         VT_BLOB_OBJECT  = 70,
466         VT_CF = 71,
467         VT_CLSID  = 72,
468         VT_VECTOR = 0x1000,
469         VT_ARRAY  = 0x2000,
470         VT_BYREF  = 0x4000,
471         VT_RESERVED = 0x8000,
472         VT_ILLEGAL      = 0xffff,
473         VT_ILLEGALMASKED  = 0xfff,
474         VT_TYPEMASK = 0xfff
475 };
476
477 /* the largest valide type
478  */
479 #define VT_MAXVALIDTYPE VT_CLSID
480
481
482 /*
483  * Declarations of the VARIANT structure and the VARIANT APIs.
484  */
485
486 /* S_OK                            : Success.
487  * DISP_E_BADVARTYPE   : The variant type vt in not a valid type of variant.
488  * DISP_E_OVERFLOW         : The data pointed to by pvarSrc does not fit in the destination type.
489  * DISP_E_TYPEMISMATCH : The variant type vt is not a valid type of variant.
490  * E_INVALIDARG            : One argument is invalid.
491  * E_OUTOFMEMORY           : Memory could not be allocated for the conversion.
492  * DISP_E_ARRAYISLOCKED : The variant contains an array that is locked.
493  */
494
495
496 typedef struct  tagCUSTDATAITEM {
497     GUID guid;
498     VARIANTARG varValue;
499 } CUSTDATAITEM, *LPCUSTDATAITEM;
500
501 typedef struct  tagCUSTDATA {
502     INT cCustData;
503     LPCUSTDATAITEM prgCustData; /* count cCustdata */
504 } CUSTDATA, *LPCUSTDATA;
505
506
507
508 /*****************************************************************************
509  * IDispatch interface
510  */
511 #define ICOM_INTERFACE IDispatch
512 #define IDispatch_METHODS \
513   ICOM_METHOD1(HRESULT, GetTypeInfoCount, UINT*, pctinfo) \
514   ICOM_METHOD3(HRESULT, GetTypeInfo, UINT, iTInfo, LCID, lcid, ITypeInfo**, ppTInfo) \
515   ICOM_METHOD5(HRESULT, GetIDsOfNames, REFIID, riid, LPOLESTR*, rgszNames, UINT, cNames, LCID, lcid, DISPID*, rgDispId) \
516   ICOM_METHOD8(HRESULT, Invoke, DISPID, dispIdMember, REFIID, riid, LCID, lcid, WORD, wFlags, DISPPARAMS*, pDispParams, VARIANT*, pVarResult, EXCEPINFO*, pExepInfo, UINT*, puArgErr)
517 #define IDispatch_IMETHODS \
518         IUnknown_IMETHODS \
519         IDispatch_METHODS
520 ICOM_DEFINE(IDispatch,IUnknown)
521 #undef ICOM_INTERFACE
522
523 /*** IUnknown methods ***/
524 #define IDispatch_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
525 #define IDispatch_AddRef(p)             ICOM_CALL (AddRef,p)
526 #define IDispatch_Release(p)            ICOM_CALL (Release,p)
527 /*** IDispatch methods ***/
528 #define IDispatch_GetTypeInfoCount(p,a)      ICOM_CALL1 (GetTypeInfoCount,p,a)
529 #define IDispatch_GetTypeInfo(p,a,b,c)       ICOM_CALL3 (GetTypeInfo,p,a,b,c)
530 #define IDispatch_GetIDsOfNames(p,a,b,c,d,e) ICOM_CALL5 (GetIDsOfNames,p,a,b,c,d,e)
531 #define IDispatch_Invoke(p,a,b,c,d,e,f,g,h)  ICOM_CALL8 (Invoke,p,a,b,c,d,e,f,g,h)
532
533
534 /*****************************************************************************
535  * ITypeInfo interface
536  */
537 #define ICOM_INTERFACE ITypeInfo
538 #define ITypeInfo_METHODS \
539         ICOM_METHOD1(HRESULT,GetTypeAttr, TYPEATTR**,ppTypeAttr) \
540         ICOM_METHOD1(HRESULT,GetTypeComp, ITypeComp**,ppTComp) \
541         ICOM_METHOD2(HRESULT,GetFuncDesc, UINT,index, FUNCDESC**,ppFuncDesc) \
542         ICOM_METHOD2(HRESULT,GetVarDesc, UINT,index, VARDESC**,ppVarDesc) \
543         ICOM_METHOD4(HRESULT,GetNames, MEMBERID,memid, BSTR*,rgBstrNames, UINT,cMaxNames, UINT*,pcNames) \
544         ICOM_METHOD2(HRESULT,GetRefTypeOfImplType, UINT,index, HREFTYPE*, pRefType) \
545         ICOM_METHOD2(HRESULT,GetImplTypeFlags, UINT,index, INT*,pImplTypeFlags)\
546         ICOM_METHOD3(HRESULT,GetIDsOfNames, LPOLESTR*,rgszNames, UINT,cNames, MEMBERID*,pMemId) \
547         ICOM_METHOD7(HRESULT,Invoke, PVOID,pvInstance, MEMBERID,memid, WORD,wFlags, DISPPARAMS*,pDispParams, VARIANT*,pVarResult, EXCEPINFO*,pExcepInfo, UINT*,puArgErr) \
548         ICOM_METHOD5(HRESULT,GetDocumentation, MEMBERID,memid, BSTR*,pBstrName, BSTR*,pBstrDocString, DWORD*,pdwHelpContext, BSTR*,pBstrHelpFile) \
549         ICOM_METHOD5(HRESULT,GetDllEntry, MEMBERID,memid, INVOKEKIND,invKind, BSTR*,pBstrDllName, BSTR*,pBstrName, WORD*,pwOrdinal) \
550         ICOM_METHOD2(HRESULT,GetRefTypeInfo, HREFTYPE,hRefType, ITypeInfo**,ppTInfo) \
551         ICOM_METHOD3(HRESULT,AddressOfMember, MEMBERID,memid, INVOKEKIND,invKind, PVOID*,ppv) \
552         ICOM_METHOD3(HRESULT,CreateInstance, IUnknown*,pUnkOuter, REFIID,riid, PVOID*,ppvObj) \
553         ICOM_METHOD2(HRESULT,GetMops, MEMBERID,memid, BSTR*,pBstrMops) \
554         ICOM_METHOD2(HRESULT,GetContainingTypeLib, ITypeLib**,ppTLib, UINT*,pIndex) \
555         ICOM_METHOD1(HRESULT,ReleaseTypeAttr, TYPEATTR*,pTypeAttr) \
556         ICOM_METHOD1(HRESULT,ReleaseFuncDesc, FUNCDESC*,pFuncDesc) \
557         ICOM_METHOD1(HRESULT,ReleaseVarDesc, VARDESC*,pVarDesc)
558
559 #define ITypeInfo_IMETHODS \
560         IUnknown_IMETHODS \
561         ITypeInfo_METHODS
562 ICOM_DEFINE(ITypeInfo,IUnknown)
563 #undef ICOM_INTERFACE
564
565 /*** IUnknown methods ***/
566 #define ITypeInfo_QueryInterface(p,a,b)         ICOM_CALL2(QueryInterface,p,a,b)
567 #define ITypeInfo_AddRef(p)                     ICOM_CALL (AddRef,p)
568 #define ITypeInfo_Release(p)                    ICOM_CALL (Release,p)
569 /*** ITypeInfo methods ***/
570 #define ITypeInfo_GetTypeAttr(p,a)              ICOM_CALL1(GetTypeAttr,p,a)
571 #define ITypeInfo_GetTypeComp(p,a)              ICOM_CALL1(GetTypeComp,p,a)
572 #define ITypeInfo_GetFuncDesc(p,a,b)            ICOM_CALL2(GetFuncDesc,p,a,b)
573 #define ITypeInfo_GetVarDesc(p,a,b)             ICOM_CALL2(GetVarDesc,p,a,b)
574 #define ITypeInfo_GetNames(p,a,b,c,d)           ICOM_CALL4(GetNames,p,a,b,c,d)
575 #define ITypeInfo_GetRefTypeOfImplType(p,a,b)   ICOM_CALL2(GetRefTypeOfImplType,p,a,b)
576 #define ITypeInfo_GetImplTypeFlags(p,a,b)       ICOM_CALL2(GetImplTypeFlags,p,a,b)
577 #define ITypeInfo_GetIDsOfNames(p,a,b,c)        ICOM_CALL3(GetIDsOfNames,p,a,b,c)
578 #define ITypeInfo_Invoke(p,a,b,c,d,e,f,g)       ICOM_CALL7(Invoke,p,a,b,c,d,e,f,g)
579 #define ITypeInfo_GetDocumentation(p,a,b,c,d,e) ICOM_CALL5(GetDocumentation,p,a,b,c,d,e)
580 #define ITypeInfo_GetDllEntry(p,a,b,c,d,e)      ICOM_CALL5(GetDllEntry,p,a,b,c,d,e)
581 #define ITypeInfo_GetRefTypeInfo(p,a,b)         ICOM_CALL2(GetRefTypeInfo,p,a,b)
582 #define ITypeInfo_AddressOfMember(p,a,b,c)      ICOM_CALL3(AddressOfMember,p,a,b,c)
583 #define ITypeInfo_CreateInstance(p,a,b,c)       ICOM_CALL3(CreateInstance,p,a,b,c)
584 #define ITypeInfo_GetMops(p,a,b)                ICOM_CALL2(GetMops,p,a,b)
585 #define ITypeInfo_GetContainingTypeLib(p,a,b)   ICOM_CALL2(GetContainingTypeLib,p,a,b)
586 #define ITypeInfo_ReleaseTypeAttr(p,a)          ICOM_CALL1(ReleaseTypeAttr,p,a)
587 #define ITypeInfo_ReleaseFuncDesc(p,a)          ICOM_CALL1(ReleaseFuncDesc,p,a)
588 #define ITypeInfo_ReleaseVarDesc(p,a)           ICOM_CALL1(ReleaseVarDesc,p,a)
589                                   
590
591 /*****************************************************************************
592  * ITypeInfo2 interface
593  */
594 #define ICOM_INTERFACE ITypeInfo2
595 #define ITypeInfo2_METHODS \
596         ICOM_METHOD1(HRESULT, GetTypeKind, TYPEKIND*, pTypeKind) \
597         ICOM_METHOD1(HRESULT, GetTypeFlags, UINT*, pTypeFlags) \
598         ICOM_METHOD3(HRESULT, GetFuncIndexOfMemId, MEMBERID, memid, INVOKEKIND,\
599                 invKind, UINT*, pFuncIndex) \
600         ICOM_METHOD2(HRESULT, GetVarIndexOfMemId, MEMBERID, memid, UINT*, \
601                 pVarIndex) \
602         ICOM_METHOD2(HRESULT, GetCustData, REFGUID, guid, VARIANT*, pVarVal) \
603         ICOM_METHOD3(HRESULT, GetFuncCustData, UINT, index, REFGUID, guid,\
604                 VARIANT*, pVarVal) \
605         ICOM_METHOD4(HRESULT, GetParamCustData, UINT, indexFunc, UINT,\
606                 indexParam, REFGUID, guid, VARIANT*, pVarVal) \
607         ICOM_METHOD3(HRESULT, GetVarCustData, UINT, index, REFGUID, guid,\
608                 VARIANT*, pVarVal) \
609         ICOM_METHOD3(HRESULT, GetImplTypeCustData, UINT, index, REFGUID, guid,\
610                 VARIANT*, pVarVal) \
611         ICOM_METHOD5(HRESULT, GetDocumentation2, MEMBERID, memid, LCID, lcid,\
612                 BSTR*, pbstrHelpString, DWORD*, pdwHelpStringContext,\
613                 BSTR*, pbstrHelpStringDll) \
614         ICOM_METHOD1(HRESULT, GetAllCustData, CUSTDATA*, pCustData) \
615         ICOM_METHOD2(HRESULT, GetAllFuncCustData, UINT, index, CUSTDATA*,\
616                 pCustData)\
617         ICOM_METHOD3(HRESULT, GetAllParamCustData, UINT, indexFunc, UINT,\
618                 indexParam, CUSTDATA*, pCustData) \
619         ICOM_METHOD2(HRESULT, GetAllVarCustData, UINT, index, CUSTDATA*,\
620                 pCustData) \
621         ICOM_METHOD2(HRESULT, GetAllImplTypeCustData, UINT, index, CUSTDATA*,\
622                 pCustData)
623
624 #define ITypeInfo2_IMETHODS \
625         IUnknown_IMETHODS \
626         ITypeInfo_METHODS \
627         ITypeInfo2_METHODS 
628 ICOM_DEFINE(ITypeInfo2,ITypeInfo)
629 #undef ICOM_INTERFACE
630         
631 /*** IUnknown methods ***/
632 #define ITypeInfo2_QueryInterface(p,a,b)         ICOM_CALL2(QueryInterface,p,a,b)
633 #define ITypeInfo2_AddRef(p)                     ICOM_CALL (AddRef,p)
634 #define ITypeInfo2_Release(p)                    ICOM_CALL (Release,p)
635 /*** ITypeInfo methods ***/
636 #define ITypeInfo2_GetTypeAttr(p,a)              ICOM_CALL1(GetTypeAttr,p,a)
637 #define ITypeInfo2_GetTypeComp(p,a)              ICOM_CALL1(GetTypeComp,p,a)
638 #define ITypeInfo2_GetFuncDesc(p,a,b)            ICOM_CALL2(GetFuncDesc,p,a,b)
639 #define ITypeInfo2_GetVarDesc(p,a,b)             ICOM_CALL2(GetVarDesc,p,a,b)
640 #define ITypeInfo2_GetNames(p,a,b,c,d)           ICOM_CALL4(GetNames,p,a,b,c,d)
641 #define ITypeInfo2_GetRefTypeOfImplType(p,a,b)   ICOM_CALL2(GetRefTypeOfImplType,p,a,b)
642 #define ITypeInfo2_GetImplTypeFlags(p,a,b)       ICOM_CALL2(GetImplTypeFlags,p,a,b)
643 #define ITypeInfo2_GetIDsOfNames(p,a,b,c)        ICOM_CALL3(GetIDsOfNames,p,a,b,c)
644 #define ITypeInfo2_Invoke(p,a,b,c,d,e,f,g)       ICOM_CALL7(Invoke,p,a,b,c,d,e,f,g)
645 #define ITypeInfo2_GetDocumentation(p,a,b,c,d,e) ICOM_CALL5(GetDocumentation,p,a,b,c,d,e)
646 #define ITypeInfo2_GetDllEntry(p,a,b,c,d,e)      ICOM_CALL5(GetDllEntry,p,a,b,c,d,e)
647 #define ITypeInfo2_GetRefTypeInfo(p,a,b)         ICOM_CALL2(GetRefTypeInfo,p,a,b)
648 #define ITypeInfo2_AddressOfMember(p,a,b,c)      ICOM_CALL3(AddressOfMember,p,a,b,c)
649 #define ITypeInfo2_CreateInstance(p,a,b,c)       ICOM_CALL3(CreateInstance,p,a,b,c)
650 #define ITypeInfo2_GetMops(p,a,b)                ICOM_CALL2(GetMops,p,a,b)
651 #define ITypeInfo2_GetContainingTypeLib(p,a,b)   ICOM_CALL2(GetContainingTypeLib,p,a,b)
652 #define ITypeInfo2_ReleaseTypeAttr(p,a)          ICOM_CALL1(ReleaseTypeAttr,p,a)
653 #define ITypeInfo2_ReleaseFuncDesc(p,a)          ICOM_CALL1(ReleaseFuncDesc,p,a)
654 #define ITypeInfo2_ReleaseVarDesc(p,a)           ICOM_CALL1(ReleaseVarDesc,p,a)
655 /*** ITypeInfo2 methods ***/
656 #define ITypeInfo2_GetTypeKind(p,a)              ICOM_CALL1(GetTypeKind,p,a)
657 #define ITypeInfo2_GetTypeFlags(p,a)             ICOM_CALL1(GetTypeFlags,p,a)
658 #define ITypeInfo2_GetFuncIndexOfMemId(p,a,b,c)  ICOM_CALL3(GetFuncIndexOfMemId,p,a,b,c)
659 #define ITypeInfo2_GetVarIndexOfMemId(p,a,b)     ICOM_CALL2(GetVarIndexOfMemId,p,a,b)
660 #define ITypeInfo2_GetCustData(p,a,b)            ICOM_CALL2(GetCustData,p,a,b)
661 #define ITypeInfo2_GetFuncCustData(p,a,b,c)      ICOM_CALL3(GetFuncCustData,p,a,b,c)
662 #define ITypeInfo2_GetParamCustData(p,a,b,c,d)   ICOM_CALL4(GetParamCustData,p,a,b,c,d)
663 #define ITypeInfo2_GetVarCustData(p,a,b,c)       ICOM_CALL3(GetVarCustData,p,a,b,c)
664 #define ITypeInfo2_GetImplTypeCustData(p,a,b,c)  ICOM_CALL3(GetImplTypeCustData,p,a,b,c)
665 #define ITypeInfo2_GetDocumentation2(p,a,b,c,d,e) ICOM_CALL5(GetDocumentation2,p,a,b,c,d,e)
666 #define ITypeInfo2_GetAllCustData(p,a)           ICOM_CALL1(GetAllCustData,p,a)
667 #define ITypeInfo2_GetAllFuncCustData(p,a,b)     ICOM_CALL2(GetAllFuncCustData,p,a,b)
668 #define ITypeInfo2_GetAllParamCustData(p,a,b,c)  ICOM_CALL3(GetAllParamCustData,p,a,b,c)
669 #define ITypeInfo2_GetAllVarCustData(p,a,b)      ICOM_CALL2(GetAllVarCustData,p,a,b)
670 #define ITypeInfo2_GetAllImplTypeCustData(p,a,b) ICOM_CALL2(GetAllImplTypeCustData,p,a,b)
671
672 /*****************************************************************************
673  * ITypeLib interface
674  */
675 #define ICOM_INTERFACE ITypeLib
676 #define ITypeLib_METHODS \
677         ICOM_METHOD (UINT,GetTypeInfoCount) \
678         ICOM_METHOD2(HRESULT,GetTypeInfo, UINT,index, ITypeInfo**,ppTInfo) \
679         ICOM_METHOD2(HRESULT,GetTypeInfoType, UINT,index, TYPEKIND*,pTKind) \
680         ICOM_METHOD2(HRESULT,GetTypeInfoOfGuid, REFGUID,guid, ITypeInfo**,ppTinfo) \
681         ICOM_METHOD1(HRESULT,GetLibAttr, TLIBATTR**,ppTLibAttr) \
682         ICOM_METHOD1(HRESULT,GetTypeComp, ITypeComp**,ppTComp) \
683         ICOM_METHOD5(HRESULT,GetDocumentation, INT,index, BSTR*,pBstrName, BSTR*,pBstrDocString, DWORD*,pdwHelpContext, BSTR*,pBstrHelpFile) \
684         ICOM_METHOD3(HRESULT,IsName, LPOLESTR,szNameBuf, ULONG,lHashVal, BOOL*,bfName) \
685         ICOM_METHOD5(HRESULT,FindName, LPOLESTR,szNameBuf, ULONG,lHashVal, ITypeInfo**,ppTInfo, MEMBERID*,rgMemId, USHORT*,pcFound) \
686         ICOM_METHOD1(VOID,ReleaseTLibAttr, TLIBATTR*,pTLibAttr)
687 #define ITypeLib_IMETHODS \
688         IUnknown_IMETHODS \
689         ITypeLib_METHODS
690 ICOM_DEFINE(ITypeLib,IUnknown)
691 #undef ICOM_INTERFACE
692
693 /*** IUnknown methods ***/
694 #define ITypeLib_QueryInterface(p,a,b)         ICOM_CALL2(QueryInterface,p,a,b)
695 #define ITypeLib_AddRef(p)                     ICOM_CALL (AddRef,p)
696 #define ITypeLib_Release(p)                    ICOM_CALL (Release,p)
697 /*** ITypeLib methods ***/
698 #define ITypeLib_GetTypeInfoCount(p)           ICOM_CALL (GetTypeInfoCount,p)
699 #define ITypeLib_GetTypeInfo(p,a,b)            ICOM_CALL2(GetTypeInfo,p,a,b)
700 #define ITypeLib_GetTypeInfoType(p,a,b)        ICOM_CALL2(GetTypeInfoType,p,a,b)
701 #define ITypeLib_GetTypeInfoOfGuid(p,a,b)      ICOM_CALL2(GetTypeInfoOfGuid,p,a,b)
702 #define ITypeLib_GetLibAttr(p,a)               ICOM_CALL1(GetLibAttr,p,a)
703 #define ITypeLib_GetTypeComp(p,a)              ICOM_CALL1(GetTypeComp,p,a)
704 #define ITypeLib_GetDocumentation(p,a,b,c,d,e) ICOM_CALL5(GetDocumentation,p,a,b,c,d,e)
705 #define ITypeLib_IsName(p,a,b,c)               ICOM_CALL3(IsName,p,a,b,c)
706 #define ITypeLib_FindName(p,a,b,c,d,e)         ICOM_CALL5(FindName,p,a,b,c,d,e)
707 #define ITypeLib_ReleaseTLibAttr(p,a)          ICOM_CALL1(ReleaseTLibAttr,p,a)
708
709
710 /*****************************************************************************
711  * ITypeLib2 interface
712  */
713 #define ICOM_INTERFACE ITypeLib2
714 #define ITypeLib2_METHODS \
715         ICOM_METHOD2(HRESULT, GetCustData, REFGUID, guid, VARIANT*, pVarVal) \
716         ICOM_METHOD2(HRESULT, GetLibStatistics, ULONG *, pcUniqueNames, ULONG*,pcchUniqueNames) \
717         ICOM_METHOD5(HRESULT, GetDocumentation2, INT, index, LCID, lcid,BSTR*, pbstrHelpString, DWORD*, pdwHelpStringContext, BSTR*, strHelpStringDll) \
718         ICOM_METHOD1(HRESULT, GetAllCustData, CUSTDATA *, pCustData)
719 #define ITypeLib2_IMETHODS \
720         IUnknown_IMETHODS \
721         ITypeLib_IMETHODS \
722         ITypeLib2_METHODS
723 ICOM_DEFINE(ITypeLib2,ITypeLib)
724 #undef ICOM_INTERFACE
725
726 /*** IUnknown methods ***/
727 #define ITypeLib2_QueryInterface(p,a,b)         ICOM_CALL2(QueryInterface,p,a,b)
728 #define ITypeLib2_AddRef(p)                     ICOM_CALL (AddRef,p)
729 #define ITypeLib2_Release(p)                    ICOM_CALL (Release,p)
730 /*** ITypeLib methods ***/
731 #define ITypeLib2_GetTypeInfoCount(p)           ICOM_CALL (GetTypeInfoCount,p)
732 #define ITypeLib2_GetTypeInfo(p,a,b)            ICOM_CALL2(GetTypeInfo,p,a,b)
733 #define ITypeLib2_GetTypeInfoType(p,a,b)        ICOM_CALL2(GetTypeInfoType,p,a,b)
734 #define ITypeLib2_GetTypeInfoOfGuid(p,a,b)      ICOM_CALL2(GetTypeInfoOfGuid,p,a,b)
735 #define ITypeLib2_GetLibAttr(p,a)               ICOM_CALL1(GetLibAttr,p,a)
736 #define ITypeLib2_GetTypeComp(p,a)              ICOM_CALL1(GetTypeComp,p,a)
737 #define ITypeLib2_GetDocumentation(p,a,b,c,d,e) ICOM_CALL5(GetDocumentation,p,a,b,c,d,e)
738 #define ITypeLib2_IsName(p,a,b,c)               ICOM_CALL3(IsName,p,a,b,c)
739 #define ITypeLib2_FindName(p,a,b,c,d,e)         ICOM_CALL5(FindName,p,a,b,c,d,e)
740 #define ITypeLib2_ReleaseTLibAttr(p,a)          ICOM_CALL1(ReleaseTLibAttr,p,a)
741 /*** ITypeLib2 methods ***/
742 #define ITypeLib2_GetCustData(p,a,b)            ICOM_CALL2(GetCustData,p,a,b)
743 #define ITypeLib2_GetLibStatistics(p,a,b)       ICOM_CALL2(GetLibStatistics,p,a,b)
744 #define ITypeLib2_GetDocumentation2(p,a,b,c,d,e,f) ICOM_CALL5(GetDocumentation2,p,a,b,c,d,e)
745 #define ITypeLib2_GetAllCustData(p,a)           ICOM_CALL1(GetAllCustData,p,a)
746
747 /*****************************************************************************
748  * ITypeComp interface
749  */
750 #define ICOM_INTERFACE ITypeComp
751 #define ITypeComp_METHODS \
752         ICOM_METHOD6(HRESULT,Bind, LPOLESTR,szName, ULONG,lHashVal, WORD,wFlags, ITypeInfo**,ppTInfo, DESCKIND*,pDescKind, BINDPTR*,pBindPtr) \
753         ICOM_METHOD4(HRESULT,BindType, LPOLESTR,szName, ULONG,lHashVal, ITypeInfo**,ppTInfo, ITypeComp**,ppTComp) 
754 #define ITypeComp_IMETHODS \
755         IUnknown_IMETHODS \
756         ITypeComp_METHODS
757 ICOM_DEFINE(ITypeComp,IUnknown)
758 #undef ICOM_INTERFACE
759
760 /*** IUnknown methods ***/
761 #define ITypeComp_QueryInterface(p,a,b)         ICOM_CALL2(QueryInterface,p,a,b)
762 #define ITypeComp_AddRef(p)                     ICOM_CALL (AddRef,p)
763 #define ITypeComp_Release(p)                    ICOM_CALL (Release,p)
764 /*** ITypeComp methods ***/
765 #define ITypeComp_Bind(p,a,b,c,d,e,f)           ICOM_CALL6(Bind,p,a,b,c,d,e,f)
766 #define ITypeComp_BindType(p,a,b,c,d)           ICOM_CALL4(BindType,p,a,b,c,d)
767                                  
768 /*****************************************************************************
769  * IEnumVARIANT interface
770  */
771 #define ICOM_INTERFACE IEnumVARIANT
772 #define IEnumVARIANT_METHODS \
773         ICOM_METHOD3(HRESULT,Next, ULONG,celt, VARIANT*,rgVar, ULONG*,pCeltFetched) \
774         ICOM_METHOD1(HRESULT,Skip, ULONG,celt) \
775         ICOM_METHOD (HRESULT,Reset) \
776         ICOM_METHOD1(HRESULT,Clone, IEnumVARIANT**,ppEnum) 
777 #define IEnumVARIANT_IMETHODS \
778         IUnknown_IMETHODS \
779         IEnumVARIANT_METHODS
780 ICOM_DEFINE(IEnumVARIANT,IUnknown)
781 #undef ICOM_INTERFACE
782
783 /*** IUnknown methods ***/
784 #define IEnumVARIANT_QueryInterface(p,a,b)   ICOM_CALL2(QueryInterface,p,a,b)
785 #define IEnumVARIANT_AddRef(p)               ICOM_CALL (AddRef,p)
786 #define IEnumVARIANT_Release(p)              ICOM_CALL (Release,p)
787 /*** IEnumVARIANT methods ***/
788 #define IEnumVARIANT_Next(p,a,b,c)           ICOM_CALL3(Next,p,a,b,c)
789 #define IEnumVARIANT_Skip(p,a)               ICOM_CALL1(Skip,p,a)
790 #define IEnumVARIANT_Reset(p)                ICOM_CALL (Reset,p)
791 #define IEnumVARIANT_Clone(p,a)              ICOM_CALL1(Clone,p,a)
792                                  
793 #endif /* __WINE_WINE_OBJ_OLEAUT_H */
794