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