- Forte C does not support nameless structures or unions
[wine] / include / wine / obj_oleaut.h
1 /*
2  * Defines the COM interfaces and APIs related to OLE automation support.
3  *
4  * Copyright (C) the Wine project
5  *
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.
10  *
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.
15  *
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
19  */
20
21 #ifndef __WINE_WINE_OBJ_OLEAUT_H
22 #define __WINE_WINE_OBJ_OLEAUT_H
23
24
25 DEFINE_OLEGUID(IID_StdOle, 0x00020430,0,0);
26
27 /*****************************************************************************
28  * Predeclare the interfaces
29  */
30 DEFINE_OLEGUID(IID_IDispatch,       0x00020400,0,0);
31 typedef struct IDispatch IDispatch,*LPDISPATCH;
32
33 DEFINE_OLEGUID(IID_ITypeInfo,       0x00020401,0,0);
34 typedef struct ITypeInfo ITypeInfo,*LPTYPEINFO;
35
36 DEFINE_OLEGUID(IID_ITypeLib,        0x00020402,0,0);
37 typedef struct ITypeLib ITypeLib,*LPTYPELIB;
38
39 DEFINE_OLEGUID(IID_ITypeComp,       0x00020403,0,0);
40 typedef struct ITypeComp ITypeComp,*LPTYPECOMP;
41
42 DEFINE_OLEGUID(IID_IEnumVARIANT,    0x00020404,0,0);
43 typedef struct IEnumVARIANT IEnumVARIANT,*LPENUMVARIANT;
44
45 DEFINE_OLEGUID(IID_ICreateTypeInfo, 0x00020405,0,0);
46 typedef struct ICreateTypeInfo ICreateTypeInfo,*LPCREATETYPEINFO;
47
48 DEFINE_OLEGUID(IID_ICreateTypeLib,  0x00020406,0,0);
49 typedef struct ICreateTypeLib ICreateTypeLib,*LPCREATETYPELIB;
50
51 DEFINE_OLEGUID(IID_ICreateTypeInfo2,0x0002040E,0,0);
52 typedef struct ICreateTypeInfo2 ICreateTypeInfo2,*LPCREATETYPEINFO2;
53
54 DEFINE_OLEGUID(IID_ICreateTypeLib2, 0x0002040F,0,0);
55 typedef struct ICreateTypeLib2 ICreateTypeLib2,*LPCREATETYPELIB2;
56
57 DEFINE_OLEGUID(IID_ITypeChangeEvents,0x00020410,0,0);
58 typedef struct ITypeChangeEvents ITypeChangeEvents,*LPTYPECHANGEEVENTS;
59
60 DEFINE_OLEGUID(IID_ITypeLib2,       0x00020411,0,0);
61 typedef struct ITypeLib2 ITypeLib2,*LPTYPELIB2;
62
63 DEFINE_OLEGUID(IID_ITypeInfo2,      0x00020412,0,0);
64 typedef struct ITypeInfo2 ITypeInfo2,*LPTYPEINFO2;
65
66 /* The OLE Automation ProxyStub Interface Class (aka Typelib Marshaler) */
67 DEFINE_OLEGUID(CLSID_PSOAInterface, 0x00020424,0,0);
68
69 /*****************************************************************************
70  * Automation data types
71  */
72
73 /*****************************************************************
74  *  SafeArray defines and structs
75  */
76
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 )
89
90 /* Undocumented flags */
91 #define FADF_CREATEVECTOR ( 0x2000 ) /* set when the safe array is created using SafeArrayCreateVector */
92
93
94 typedef struct  tagSAFEARRAYBOUND
95 {
96   ULONG cElements;                  /* Number of elements in dimension */
97   LONG  lLbound;                    /* Lower bound of dimension */
98 } SAFEARRAYBOUND;
99
100 typedef struct  tagSAFEARRAY
101 {
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;
109
110 typedef enum tagCALLCONV {
111         CC_CDECL    = 1,
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
121 } CALLCONV;
122
123 typedef CY CURRENCY;
124
125 /*
126  * Declarations of the VARIANT structure and the VARIANT APIs.
127  */
128 /* S_OK                            : Success.
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.
135  */
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
140 #else
141 #define __tagVARIANT
142 #define __VARIANT_NAME_1
143 #define __VARIANT_NAME_2
144 #define __VARIANT_NAME_3
145 #endif
146
147 typedef struct tagVARIANT VARIANT, *LPVARIANT;
148 typedef struct tagVARIANT VARIANTARG, *LPVARIANTARG;
149
150 struct tagVARIANT
151 {
152     union
153     {
154         struct __tagVARIANT
155         {
156             VARTYPE vt;
157             WORD wReserved1;
158             WORD wReserved2;
159             WORD wReserved3;
160             union /* DUMMYUNIONNAME */
161             {
162                 /* By value. */
163                 CHAR cVal;
164                 USHORT uiVal;
165                 ULONG ulVal;
166                 INT intVal;
167                 UINT uintVal;
168                 BYTE bVal;
169                 short iVal;
170                 long lVal;
171                 float fltVal;
172                 double dblVal;
173                 VARIANT_BOOL boolVal;
174                 SCODE scode;
175                 DATE date;
176                 BSTR bstrVal;
177                 CY cyVal;
178                 IUnknown* punkVal;
179                 IDispatch* pdispVal;
180                 SAFEARRAY* parray;
181
182                 /* By reference */
183                 CHAR* pcVal;
184                 USHORT* puiVal;
185                 ULONG* pulVal;
186                 INT* pintVal;
187                 UINT* puintVal;
188                 BYTE* pbVal;
189                 short* piVal;
190                 long* plVal;
191                 float* pfltVal;
192                 double* pdblVal;
193                 VARIANT_BOOL* pboolVal;
194                 SCODE* pscode;
195                 DATE* pdate;
196                 BSTR* pbstrVal;
197                 VARIANT* pvarVal;
198                 PVOID byref;
199                 CY* pcyVal;
200                 DECIMAL* pdecVal;
201                 IUnknown** ppunkVal;
202                 IDispatch** ppdispVal;
203                 SAFEARRAY** pparray;
204             } __VARIANT_NAME_3;
205         } __VARIANT_NAME_2;
206         DECIMAL decVal;
207     } __VARIANT_NAME_1;
208 };
209
210
211 typedef LONG DISPID;
212 typedef DWORD HREFTYPE;
213 typedef DISPID MEMBERID;
214
215 #define DISPATCH_METHOD         0x1
216 #define DISPATCH_PROPERTYGET    0x2
217 #define DISPATCH_PROPERTYPUT    0x4
218 #define DISPATCH_PROPERTYPUTREF 0x8
219
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 )
228
229 #define MEMBERID_NIL DISPID_UNKNOWN
230
231 #define IMPLTYPEFLAG_FDEFAULT         (0x1)
232 #define IMPLTYPEFLAG_FSOURCE          (0x2)
233 #define IMPLTYPEFLAG_FRESTRICTED      (0x4)
234 #define IMPLTYPEFLAG_FDEFAULTVTABLE   (0x8)
235
236 typedef struct  tagDISPPARAMS
237 {
238   VARIANTARG* rgvarg;
239   DISPID*     rgdispidNamedArgs;
240   UINT      cArgs;
241   UINT      cNamedArgs;
242 } DISPPARAMS;
243
244 typedef struct tagEXCEPINFO
245 {
246     WORD  wCode;
247     WORD  wReserved;
248     BSTR  bstrSource;
249     BSTR  bstrDescription;
250     BSTR  bstrHelpFile;
251     DWORD dwHelpContext;
252     PVOID pvReserved;
253     HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);
254     SCODE scode;
255 } EXCEPINFO, * LPEXCEPINFO;
256
257 typedef struct tagIDLDESC
258 {
259         ULONG dwReserved;
260         USHORT wIDLFlags;
261 } IDLDESC;
262
263 typedef struct tagPARAMDESCEX
264 {
265         ULONG cBytes;
266         VARIANTARG varDefaultValue;
267 } PARAMDESCEX, *LPPARAMDESCEX;
268
269 typedef struct tagPARAMDESC
270 {
271         LPPARAMDESCEX pparamdescex;
272         USHORT wParamFlags;
273 } PARAMDESC;
274
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)
283
284 typedef struct tagTYPEDESC
285 {
286         union {
287                 struct tagTYPEDESC *lptdesc;
288                 struct tagARRAYDESC *lpadesc;
289                 HREFTYPE hreftype;
290         } DUMMYUNIONNAME;
291         VARTYPE vt;
292 } TYPEDESC;
293
294 typedef struct tagELEMDESC
295 {
296         TYPEDESC tdesc;
297         union {
298                 IDLDESC idldesc;
299                 PARAMDESC paramdesc;
300         } DUMMYUNIONNAME;
301 } ELEMDESC, *LPELEMDESC;
302
303 typedef enum tagTYPEKIND
304 {
305         TKIND_ENUM = 0,
306         TKIND_RECORD = 1,
307         TKIND_MODULE = 2,
308         TKIND_INTERFACE = 3,
309         TKIND_DISPATCH = 4,
310         TKIND_COCLASS = 5,
311         TKIND_ALIAS = 6,
312         TKIND_UNION = 7,
313         TKIND_MAX = 8
314 } TYPEKIND;
315
316 typedef struct tagTYPEATTR
317 {
318         GUID guid;
319         LCID lcid;
320         DWORD dwReserved;
321         MEMBERID memidConstructor;
322         MEMBERID memidDestructor;
323         LPOLESTR lpstrSchema;
324         ULONG cbSizeInstance;
325         TYPEKIND typekind;
326         WORD cFuncs;
327         WORD cVars;
328         WORD cImplTypes;
329         WORD cbSizeVft;
330         WORD cbAlignment;
331         WORD wTypeFlags;
332         WORD wMajorVerNum;
333         WORD wMinorVerNum;
334         TYPEDESC tdescAlias;
335         IDLDESC idldescType;
336 } TYPEATTR, *LPTYPEATTR;
337
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
354 } TYPEFLAGS;
355
356 typedef struct tagARRAYDESC
357 {
358         TYPEDESC tdescElem;
359         USHORT cDims;
360         SAFEARRAYBOUND rgbounds[1];
361 } ARRAYDESC;
362
363 typedef enum tagFUNCKIND
364 {
365         FUNC_VIRTUAL = 0,
366         FUNC_PUREVIRTUAL = 1,
367         FUNC_NONVIRTUAL = 2,
368         FUNC_STATIC = 3,
369         FUNC_DISPATCH = 4
370 } FUNCKIND;
371
372 typedef enum tagFUNCFLAGS
373 {
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
387 } FUNCFLAGS;
388
389 typedef enum tagINVOKEKIND
390 {
391         INVOKE_FUNC = 1,
392         INVOKE_PROPERTYGET = 2,
393         INVOKE_PROPERTYPUT = 4,
394         INVOKE_PROPERTYPUTREF = 8
395 } INVOKEKIND;
396
397 typedef struct tagFUNCDESC
398 {
399         MEMBERID memid;
400         SCODE *lprgscode;
401         ELEMDESC *lprgelemdescParam;
402         FUNCKIND funckind;
403         INVOKEKIND invkind;
404         CALLCONV callconv;
405         SHORT cParams;
406         SHORT cParamsOpt;
407         SHORT oVft;
408         SHORT cScodes;
409         ELEMDESC elemdescFunc;
410         WORD wFuncFlags;
411 } FUNCDESC, *LPFUNCDESC;
412
413 typedef enum tagVARKIND
414 {
415         VAR_PERINSTANCE = 0,
416         VAR_STATIC = 1,
417         VAR_CONST = 2,
418         VAR_DISPATCH = 3
419 } VARKIND;
420
421 typedef struct tagVARDESC
422 {
423         MEMBERID memid;
424         LPOLESTR lpstrSchema;
425         union {
426                 ULONG oInst;
427                 VARIANT *lpvarValue;
428         } DUMMYUNIONNAME;
429         ELEMDESC elemdescVar;
430         WORD wVarFlags;
431         VARKIND varkind;
432 } VARDESC, *LPVARDESC;
433
434 typedef enum tagSYSKIND
435 {
436         SYS_WIN16 = 0,
437         SYS_WIN32 = 1,
438         SYS_MAC = 2
439 } SYSKIND;
440
441 typedef enum tagLIBFLAGS
442 {
443         LIBFLAG_FRESTRICTED = 0x1,
444         LIBFLAG_FCONTROL = 0x2,
445         LIBFLAG_FHIDDEN = 0x4,
446         LIBFLAG_FHASDISKIMAGE = 0x8
447 } LIBFLAGS;
448
449 typedef struct tagTLIBATTR
450 {
451         GUID guid;
452         LCID lcid;
453         SYSKIND syskind;
454         WORD wMajorVerNum;
455         WORD wMinorVerNum;
456         WORD wLibFlags;
457 } TLIBATTR, *LPTLIBATTR;
458
459 typedef enum tagDESCKIND
460 {
461         DESCKIND_NONE = 0,
462         DESCKIND_FUNCDESC = 1,
463         DESCKIND_VARDESC = 2,
464         DESCKIND_TYPECOMP = 3,
465         DESCKIND_IMPLICITAPPOBJ = 4,
466         DESCKIND_MAX = 5
467 } DESCKIND;
468
469 typedef union tagBINDPTR
470 {
471         FUNCDESC *lpfuncdesc;
472         VARDESC  *lpvardesc;
473         ITypeComp *lptcomp;
474 } BINDPTR, *LPBINDPTR;
475
476 typedef enum tagVARFLAGS
477 {
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
491 } VARFLAGS;
492
493
494 /*
495  * Data types for Variants.
496  */
497
498 enum VARENUM {
499         VT_EMPTY = 0,
500         VT_NULL = 1,
501         VT_I2 = 2,
502         VT_I4 = 3,
503         VT_R4 = 4,
504         VT_R8 = 5,
505         VT_CY = 6,
506         VT_DATE = 7,
507         VT_BSTR = 8,
508         VT_DISPATCH = 9,
509         VT_ERROR  = 10,
510         VT_BOOL = 11,
511         VT_VARIANT      = 12,
512         VT_UNKNOWN      = 13,
513         VT_DECIMAL      = 14,
514         VT_I1 = 16,
515         VT_UI1  = 17,
516         VT_UI2  = 18,
517         VT_UI4  = 19,
518         VT_I8 = 20,
519         VT_UI8  = 21,
520         VT_INT  = 22,
521         VT_UINT = 23,
522         VT_VOID = 24,
523         VT_HRESULT      = 25,
524         VT_PTR  = 26,
525         VT_SAFEARRAY  = 27,
526         VT_CARRAY = 28,
527         VT_USERDEFINED  = 29,
528         VT_LPSTR  = 30,
529         VT_LPWSTR = 31,
530         VT_RECORD = 36,
531         VT_FILETIME = 64,
532         VT_BLOB = 65,
533         VT_STREAM = 66,
534         VT_STORAGE      = 67,
535         VT_STREAMED_OBJECT      = 68,
536         VT_STORED_OBJECT  = 69,
537         VT_BLOB_OBJECT  = 70,
538         VT_CF = 71,
539         VT_CLSID  = 72,
540         VT_VECTOR = 0x1000,
541         VT_ARRAY  = 0x2000,
542         VT_BYREF  = 0x4000,
543         VT_RESERVED = 0x8000,
544         VT_ILLEGAL      = 0xffff,
545         VT_ILLEGALMASKED  = 0xfff,
546         VT_TYPEMASK = 0xfff
547 };
548
549 /* the largest valide type
550  */
551 #define VT_MAXVALIDTYPE VT_CLSID
552
553
554 /*
555  * Declarations of the VARIANT structure and the VARIANT APIs.
556  */
557
558 /* S_OK                            : Success.
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.
565  */
566
567
568 typedef struct  tagCUSTDATAITEM {
569     GUID guid;
570     VARIANTARG varValue;
571 } CUSTDATAITEM, *LPCUSTDATAITEM;
572
573 typedef struct  tagCUSTDATA {
574     INT cCustData;
575     LPCUSTDATAITEM prgCustData; /* count cCustdata */
576 } CUSTDATA, *LPCUSTDATA;
577
578
579
580 /*****************************************************************************
581  * IDispatch interface
582  */
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 \
590         IUnknown_IMETHODS \
591         IDispatch_METHODS
592 ICOM_DEFINE(IDispatch,IUnknown)
593 #undef ICOM_INTERFACE
594
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)
604
605
606 /*****************************************************************************
607  * ITypeInfo interface
608  */
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)
630
631 #define ITypeInfo_IMETHODS \
632         IUnknown_IMETHODS \
633         ITypeInfo_METHODS
634 ICOM_DEFINE(ITypeInfo,IUnknown)
635 #undef ICOM_INTERFACE
636
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)
661
662
663 /*****************************************************************************
664  * ITypeInfo2 interface
665  */
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*, \
673                 pVarIndex) \
674         ICOM_METHOD2(HRESULT, GetCustData, REFGUID, guid, VARIANT*, pVarVal) \
675         ICOM_METHOD3(HRESULT, GetFuncCustData, UINT, index, REFGUID, guid,\
676                 VARIANT*, pVarVal) \
677         ICOM_METHOD4(HRESULT, GetParamCustData, UINT, indexFunc, UINT,\
678                 indexParam, REFGUID, guid, VARIANT*, pVarVal) \
679         ICOM_METHOD3(HRESULT, GetVarCustData, UINT, index, REFGUID, guid,\
680                 VARIANT*, pVarVal) \
681         ICOM_METHOD3(HRESULT, GetImplTypeCustData, UINT, index, REFGUID, guid,\
682                 VARIANT*, pVarVal) \
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*,\
688                 pCustData)\
689         ICOM_METHOD3(HRESULT, GetAllParamCustData, UINT, indexFunc, UINT,\
690                 indexParam, CUSTDATA*, pCustData) \
691         ICOM_METHOD2(HRESULT, GetAllVarCustData, UINT, index, CUSTDATA*,\
692                 pCustData) \
693         ICOM_METHOD2(HRESULT, GetAllImplTypeCustData, UINT, index, CUSTDATA*,\
694                 pCustData)
695
696 #define ITypeInfo2_IMETHODS \
697         IUnknown_IMETHODS \
698         ITypeInfo_METHODS \
699         ITypeInfo2_METHODS
700 ICOM_DEFINE(ITypeInfo2,ITypeInfo)
701 #undef ICOM_INTERFACE
702
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)
743
744 /*****************************************************************************
745  * ITypeLib interface
746  */
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 \
760         IUnknown_IMETHODS \
761         ITypeLib_METHODS
762 ICOM_DEFINE(ITypeLib,IUnknown)
763 #undef ICOM_INTERFACE
764
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)
780
781
782 /*****************************************************************************
783  * ITypeLib2 interface
784  */
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 \
792         IUnknown_IMETHODS \
793         ITypeLib_IMETHODS \
794         ITypeLib2_METHODS
795 ICOM_DEFINE(ITypeLib2,ITypeLib)
796 #undef ICOM_INTERFACE
797
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)
818
819 /*****************************************************************************
820  * ITypeComp interface
821  */
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 \
827         IUnknown_IMETHODS \
828         ITypeComp_METHODS
829 ICOM_DEFINE(ITypeComp,IUnknown)
830 #undef ICOM_INTERFACE
831
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)
839
840 /*****************************************************************************
841  * IEnumVARIANT interface
842  */
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 \
850         IUnknown_IMETHODS \
851         IEnumVARIANT_METHODS
852 ICOM_DEFINE(IEnumVARIANT,IUnknown)
853 #undef ICOM_INTERFACE
854
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)
864
865 #endif /* __WINE_WINE_OBJ_OLEAUT_H */
866