xref: /reactos/sdk/include/psdk/oaidl.idl (revision 5100859e)
1/*
2 * Copyright 2002 Ove Kaaven
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19#ifndef DO_NO_IMPORTS
20import "objidl.idl";
21#endif
22
23interface IDispatch;
24interface ITypeInfo;
25interface ITypeLib;
26interface IRecordInfo;
27
28[
29  version(1.0),
30  pointer_default(unique)
31]
32interface IOleAutomationTypes
33{
34
35typedef CY CURRENCY;
36
37/* Safe Array */
38
39typedef struct tagSAFEARRAYBOUND {
40  ULONG cElements;
41  LONG lLbound;
42} SAFEARRAYBOUND, *LPSAFEARRAYBOUND;
43
44typedef [unique] struct _wireVARIANT *wireVARIANT;
45typedef [unique] struct _wireBRECORD *wireBRECORD;
46
47typedef struct _wireSAFEARR_BSTR {
48  ULONG Size;
49  [size_is(Size), ref] wireBSTR *aBstr;
50} SAFEARR_BSTR;
51
52typedef struct _wireSAFEARR_UNKNOWN {
53  ULONG Size;
54  [size_is(Size), ref] IUnknown **apUnknown;
55} SAFEARR_UNKNOWN;
56
57typedef struct _wireSAFEARR_DISPATCH {
58  ULONG Size;
59  [size_is(Size), ref] IDispatch **apDispatch;
60} SAFEARR_DISPATCH;
61
62typedef struct _wireSAFEARR_VARIANT {
63  ULONG Size;
64  [size_is(Size), ref] wireVARIANT *aVariant;
65} SAFEARR_VARIANT;
66
67typedef struct _wireSAFEARR_BRECORD {
68  ULONG Size;
69  [size_is(Size), ref] wireBRECORD *aRecord;
70} SAFEARR_BRECORD;
71
72typedef struct _wireSAFEARR_HAVEIID {
73  ULONG Size;
74  [size_is(Size), ref] IUnknown **apUnknown;
75  IID iid;
76} SAFEARR_HAVEIID;
77
78typedef [v1_enum] enum tagSF_TYPE {
79  SF_ERROR    = VT_ERROR,
80  SF_I1       = VT_I1,
81  SF_I2       = VT_I2,
82  SF_I4       = VT_I4,
83  SF_I8       = VT_I8,
84  SF_BSTR     = VT_BSTR,
85  SF_UNKNOWN  = VT_UNKNOWN,
86  SF_DISPATCH = VT_DISPATCH,
87  SF_VARIANT  = VT_VARIANT,
88  SF_RECORD   = VT_RECORD,
89  SF_HAVEIID  = VT_UNKNOWN|VT_RESERVED,
90} SF_TYPE;
91
92typedef union _wireSAFEARRAY_UNION switch(ULONG sfType) u {
93  case SF_BSTR:     SAFEARR_BSTR BstrStr;
94  case SF_UNKNOWN:  SAFEARR_UNKNOWN UnknownStr;
95  case SF_DISPATCH: SAFEARR_DISPATCH DispatchStr;
96  case SF_VARIANT:  SAFEARR_VARIANT VariantStr;
97  case SF_RECORD:   SAFEARR_BRECORD RecordStr;
98  case SF_HAVEIID:  SAFEARR_HAVEIID HaveIidStr;
99  case SF_I1:       BYTE_SIZEDARR ByteStr;
100  case SF_I2:       WORD_SIZEDARR WordStr;
101  case SF_I4:       DWORD_SIZEDARR LongStr;
102  case SF_I8:       HYPER_SIZEDARR HyperStr;
103} SAFEARRAYUNION;
104
105typedef [unique] struct _wireSAFEARRAY {
106  USHORT cDims;
107  USHORT fFeatures;
108  ULONG cbElements;
109  ULONG cLocks;
110  SAFEARRAYUNION uArrayStructs;
111  [size_is(cDims)] SAFEARRAYBOUND rgsabound[];
112} *wireSAFEARRAY;
113
114typedef [unique] wireSAFEARRAY *wirePSAFEARRAY;
115
116typedef struct tagSAFEARRAY {
117  USHORT cDims;
118  USHORT fFeatures;
119  ULONG cbElements;
120  ULONG cLocks;
121  PVOID pvData;
122  SAFEARRAYBOUND rgsabound[];
123} SAFEARRAY;
124
125typedef [wire_marshal(wirePSAFEARRAY)] SAFEARRAY *LPSAFEARRAY;
126
127const USHORT FADF_AUTO        = 0x0001;
128const USHORT FADF_STATIC      = 0x0002;
129const USHORT FADF_EMBEDDED    = 0x0004;
130const USHORT FADF_FIXEDSIZE   = 0x0010;
131const USHORT FADF_RECORD      = 0x0020;
132const USHORT FADF_HAVEIID     = 0x0040;
133const USHORT FADF_HAVEVARTYPE = 0x0080;
134const USHORT FADF_BSTR        = 0x0100;
135const USHORT FADF_UNKNOWN     = 0x0200;
136const USHORT FADF_DISPATCH    = 0x0400;
137const USHORT FADF_VARIANT     = 0x0800;
138const USHORT FADF_RESERVED    = 0xF008;
139/* Undocumented flags */
140const USHORT FADF_DATADELETED  = 0x1000; /* Data in a vector has been deleted */
141const USHORT FADF_CREATEVECTOR = 0x2000; /* This array is a vector */
142
143/* Variant */
144
145cpp_quote("#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)")
146cpp_quote("#define __VARIANT_NAME_1 n1")
147cpp_quote("#define __VARIANT_NAME_2 n2")
148cpp_quote("#define __VARIANT_NAME_3 n3")
149cpp_quote("#define __VARIANT_NAME_4 brecVal")
150cpp_quote("#else")
151cpp_quote("#define __tagVARIANT")
152cpp_quote("#define __VARIANT_NAME_1")
153cpp_quote("#define __VARIANT_NAME_2")
154cpp_quote("#define __VARIANT_NAME_3")
155cpp_quote("#define __tagBRECORD")
156cpp_quote("#define __VARIANT_NAME_4")
157cpp_quote("#endif")
158
159typedef [wire_marshal(wireVARIANT)] struct tagVARIANT VARIANT;
160
161struct tagVARIANT {
162  union {
163    struct __tagVARIANT {
164      VARTYPE vt;
165      WORD wReserved1;
166      WORD wReserved2;
167      WORD wReserved3;
168      union {
169        signed char cVal;
170        USHORT uiVal;
171        ULONG ulVal;
172        INT intVal;
173        UINT uintVal;
174        BYTE bVal;
175        SHORT iVal;
176        LONG lVal;
177        FLOAT fltVal;
178        DOUBLE dblVal;
179        VARIANT_BOOL boolVal;
180#if 0 /* illegal in C++ */
181        _VARIANT_BOOL bool;
182#endif
183        SCODE scode;
184        DATE date;
185        BSTR bstrVal;
186        CY cyVal;
187        IUnknown *punkVal;
188        IDispatch *pdispVal;
189        SAFEARRAY *parray;
190        LONGLONG llVal;
191        ULONGLONG ullVal;
192        signed char *pcVal;
193        USHORT *puiVal;
194        ULONG *pulVal;
195        INT *pintVal;
196        UINT *puintVal;
197        BYTE *pbVal;
198        SHORT *piVal;
199        LONG *plVal;
200        FLOAT *pfltVal;
201        DOUBLE *pdblVal;
202        VARIANT_BOOL *pboolVal;
203#if 0
204        _VARIANT_BOOL *pbool;
205#endif
206        SCODE *pscode;
207        DATE *pdate;
208        BSTR *pbstrVal;
209        VARIANT *pvarVal;
210        PVOID byref;
211        CY *pcyVal;
212        DECIMAL *pdecVal;
213        IUnknown **ppunkVal;
214        IDispatch **ppdispVal;
215        SAFEARRAY **pparray;
216        LONGLONG *pllVal;
217        ULONGLONG *pullVal;
218        struct __tagBRECORD {
219          PVOID pvRecord;
220          IRecordInfo *pRecInfo;
221        } __VARIANT_NAME_4;
222      } __VARIANT_NAME_3;
223    } __VARIANT_NAME_2;
224
225    DECIMAL decVal;
226  } __VARIANT_NAME_1;
227};
228
229typedef VARIANT *LPVARIANT;
230typedef VARIANT VARIANTARG;
231typedef VARIANTARG *LPVARIANTARG;
232
233struct _wireBRECORD {
234  ULONG fFlags;
235  ULONG clSize;
236  IRecordInfo *pRecInfo;
237  [size_is(clSize)] byte *pRecord;
238};
239
240struct _wireVARIANT {
241  DWORD clSize;
242  DWORD rpcReserved;
243  USHORT vt;
244  USHORT wReserved1;
245  USHORT wReserved2;
246  USHORT wReserved3;
247  [switch_is(vt)] union {
248  [case(VT_EMPTY, VT_NULL)]    ;
249  [case(VT_I1)]                signed char cVal;
250  [case(VT_UI2)]               USHORT uiVal;
251  [case(VT_UI4)]               ULONG ulVal;
252  [case(VT_INT)]               INT intVal;
253  [case(VT_UINT)]              UINT uintVal;
254  [case(VT_UI1)]               BYTE bVal;
255  [case(VT_I2)]                SHORT iVal;
256  [case(VT_I4)]                LONG lVal;
257  [case(VT_R4)]                FLOAT fltVal;
258  [case(VT_R8)]                DOUBLE dblVal;
259  [case(VT_BOOL)]              VARIANT_BOOL boolVal;
260  [case(VT_ERROR)]             SCODE scode;
261  [case(VT_DATE)]              DATE date;
262  [case(VT_BSTR)]              wireBSTR bstrVal;
263  [case(VT_CY)]                CY cyVal;
264  [case(VT_DECIMAL)]           DECIMAL decVal;
265  [case(VT_UNKNOWN)]           IUnknown *punkVal;
266  [case(VT_DISPATCH)]          IDispatch *pdispVal;
267  [case(VT_ARRAY)]             wireSAFEARRAY parray;
268  [case(VT_I1|VT_BYREF)]       signed char *pcVal;
269  [case(VT_UI2|VT_BYREF)]      USHORT *puiVal;
270  [case(VT_UI4|VT_BYREF)]      ULONG *pulVal;
271  [case(VT_INT|VT_BYREF)]      INT *pintVal;
272  [case(VT_UINT|VT_BYREF)]     UINT *puintVal;
273  [case(VT_UI1|VT_BYREF)]      BYTE *pbVal;
274  [case(VT_I2|VT_BYREF)]       SHORT *piVal;
275  [case(VT_I4|VT_BYREF)]       LONG *plVal;
276  [case(VT_R4|VT_BYREF)]       FLOAT *pfltVal;
277  [case(VT_R8|VT_BYREF)]       DOUBLE *pdblVal;
278  [case(VT_BOOL|VT_BYREF)]     VARIANT_BOOL *pboolVal;
279  [case(VT_ERROR|VT_BYREF)]    SCODE *pscode;
280  [case(VT_DATE|VT_BYREF)]     DATE *pdate;
281  [case(VT_BSTR|VT_BYREF)]     wireBSTR *pbstrVal;
282  [case(VT_VARIANT|VT_BYREF)]  wireVARIANT *pvarVal;
283  [case(VT_CY|VT_BYREF)]       CY *pcyVal;
284  [case(VT_DECIMAL|VT_BYREF)]  DECIMAL *pdecVal;
285  [case(VT_UNKNOWN|VT_BYREF)]  IUnknown **ppunkVal;
286  [case(VT_DISPATCH|VT_BYREF)] IDispatch **ppdispVal;
287  [case(VT_ARRAY|VT_BYREF)]    wireSAFEARRAY *pparray;
288  [case(VT_RECORD, VT_RECORD|VT_BYREF)] wireBRECORD brecVal;
289  } DUMMYUNIONNAME;
290};
291
292/* Dispatch */
293
294typedef LONG DISPID;
295typedef DWORD HREFTYPE;
296typedef DISPID MEMBERID;
297
298typedef [v1_enum] enum tagTYPEKIND {
299  TKIND_ENUM = 0,
300  TKIND_RECORD,
301  TKIND_MODULE,
302  TKIND_INTERFACE,
303  TKIND_DISPATCH,
304  TKIND_COCLASS,
305  TKIND_ALIAS,
306  TKIND_UNION,
307  TKIND_MAX
308} TYPEKIND;
309
310typedef struct tagTYPEDESC {
311  [switch_is(vt)] union {
312  [case(VT_PTR, VT_SAFEARRAY)] struct tagTYPEDESC *lptdesc;
313  [case(VT_CARRAY)]            struct tagARRAYDESC *lpadesc;
314  [case(VT_USERDEFINED)]       HREFTYPE hreftype;
315  [default]                    ;
316  } DUMMYUNIONNAME;
317  VARTYPE vt;
318} TYPEDESC;
319
320typedef struct tagARRAYDESC {
321  TYPEDESC tdescElem;
322  USHORT cDims;
323  [size_is(cDims)] SAFEARRAYBOUND rgbounds[];
324} ARRAYDESC;
325
326typedef struct tagPARAMDESCEX {
327  ULONG cBytes;
328  VARIANTARG varDefaultValue;
329} PARAMDESCEX, *LPPARAMDESCEX;
330
331typedef struct tagPARAMDESC {
332  LPPARAMDESCEX pparamdescex;
333  USHORT wParamFlags;
334} PARAMDESC, *LPPARAMDESC;
335
336const USHORT PARAMFLAG_NONE         = 0x00;
337const USHORT PARAMFLAG_FIN          = 0x01;
338const USHORT PARAMFLAG_FOUT         = 0x02;
339const USHORT PARAMFLAG_FLCID        = 0x04;
340const USHORT PARAMFLAG_FRETVAL      = 0x08;
341const USHORT PARAMFLAG_FOPT         = 0x10;
342const USHORT PARAMFLAG_FHASDEFAULT  = 0x20;
343const USHORT PARAMFLAG_FHASCUSTDATA = 0x40;
344
345typedef struct tagIDLDESC {
346  ULONG_PTR dwReserved;
347  USHORT wIDLFlags;
348} IDLDESC, *LPIDLDESC;
349
350const USHORT IDLFLAG_NONE    = PARAMFLAG_NONE;
351const USHORT IDLFLAG_FIN     = PARAMFLAG_FIN;
352const USHORT IDLFLAG_FOUT    = PARAMFLAG_FOUT;
353const USHORT IDLFLAG_FLCID   = PARAMFLAG_FLCID;
354const USHORT IDLFLAG_FRETVAL = PARAMFLAG_FRETVAL;
355
356cpp_quote("#if 0") /* for IDL only */
357typedef struct tagELEMDESC {
358  TYPEDESC tdesc;
359  PARAMDESC paramdesc;
360} ELEMDESC;
361cpp_quote("#else") /* C/C++ defs */
362cpp_quote("typedef struct tagELEMDESC {")
363cpp_quote("  TYPEDESC tdesc;")
364cpp_quote("  union {")
365cpp_quote("    IDLDESC idldesc;")
366cpp_quote("    PARAMDESC paramdesc;")
367cpp_quote("  } DUMMYUNIONNAME;")
368cpp_quote("} ELEMDESC, *LPELEMDESC;")
369cpp_quote("#endif")
370
371typedef struct tagTYPEATTR {
372  GUID guid;
373  LCID lcid;
374  DWORD dwReserved;
375  MEMBERID memidConstructor;
376  MEMBERID memidDestructor;
377  LPOLESTR lpstrSchema;
378  ULONG cbSizeInstance;
379  TYPEKIND typekind;
380  WORD cFuncs;
381  WORD cVars;
382  WORD cImplTypes;
383  WORD cbSizeVft;
384  WORD cbAlignment;
385  WORD wTypeFlags;
386  WORD wMajorVerNum;
387  WORD wMinorVerNum;
388  TYPEDESC tdescAlias;
389  IDLDESC idldescType;
390} TYPEATTR, *LPTYPEATTR;
391
392typedef struct tagDISPPARAMS {
393  [size_is(cArgs)] VARIANTARG *rgvarg;
394  [size_is(cNamedArgs)] DISPID *rgdispidNamedArgs;
395  UINT cArgs;
396  UINT cNamedArgs;
397} DISPPARAMS;
398
399cpp_quote("#if 0") /* for IDL only */
400typedef struct tagEXCEPINFO {
401  WORD wCode;
402  WORD wReserved;
403  BSTR bstrSource;
404  BSTR bstrDescription;
405  BSTR bstrHelpFile;
406  DWORD dwHelpContext;
407  ULONG_PTR pvReserved;
408  ULONG_PTR pfnDeferredFillIn;
409  SCODE scode;
410} EXCEPINFO;
411cpp_quote("#else")
412cpp_quote("typedef struct tagEXCEPINFO {")
413cpp_quote("  WORD wCode;")
414cpp_quote("  WORD wReserved;")
415cpp_quote("  BSTR bstrSource;")
416cpp_quote("  BSTR bstrDescription;")
417cpp_quote("  BSTR bstrHelpFile;")
418cpp_quote("  DWORD dwHelpContext;")
419cpp_quote("  PVOID pvReserved;")
420cpp_quote("  HRESULT (__stdcall *pfnDeferredFillIn)(struct tagEXCEPINFO *);")
421cpp_quote("  SCODE scode;")
422cpp_quote("} EXCEPINFO, *LPEXCEPINFO;")
423cpp_quote("#endif")
424
425typedef [v1_enum] enum tagCALLCONV {
426  CC_FASTCALL = 0,
427  CC_CDECL = 1,
428  CC_MSCPASCAL,
429  CC_PASCAL = CC_MSCPASCAL,
430  CC_MACPASCAL,
431  CC_STDCALL,
432  CC_FPFASTCALL,
433  CC_SYSCALL,
434  CC_MPWCDECL,
435  CC_MPWPASCAL,
436  CC_MAX
437} CALLCONV;
438
439typedef [v1_enum] enum tagFUNCKIND {
440  FUNC_VIRTUAL,
441  FUNC_PUREVIRTUAL,
442  FUNC_NONVIRTUAL,
443  FUNC_STATIC,
444  FUNC_DISPATCH
445} FUNCKIND;
446
447typedef [v1_enum] enum tagINVOKEKIND {
448  INVOKE_FUNC = 1,
449  INVOKE_PROPERTYGET = 2,
450  INVOKE_PROPERTYPUT = 4,
451  INVOKE_PROPERTYPUTREF = 8
452} INVOKEKIND;
453
454typedef struct tagFUNCDESC {
455  MEMBERID memid;
456  [size_is(cScodes)] SCODE *lprgscode;
457  [size_is(cParams)] ELEMDESC *lprgelemdescParam;
458  FUNCKIND funckind;
459  INVOKEKIND invkind;
460  CALLCONV callconv;
461  SHORT cParams;
462  SHORT cParamsOpt;
463  SHORT oVft;
464  SHORT cScodes;
465  ELEMDESC elemdescFunc;
466  WORD wFuncFlags;
467} FUNCDESC, *LPFUNCDESC;
468
469typedef [v1_enum] enum tagVARKIND {
470  VAR_PERINSTANCE,
471  VAR_STATIC,
472  VAR_CONST,
473  VAR_DISPATCH
474} VARKIND;
475
476const USHORT IMPLTYPEFLAG_FDEFAULT       = 0x1;
477const USHORT IMPLTYPEFLAG_FSOURCE        = 0x2;
478const USHORT IMPLTYPEFLAG_FRESTRICTED    = 0x4;
479const USHORT IMPLTYPEFLAG_FDEFAULTVTABLE = 0x8;
480
481typedef struct tagVARDESC {
482  MEMBERID memid;
483  LPOLESTR lpstrSchema;
484  [switch_is(varkind)] union {
485  [case(VAR_PERINSTANCE, VAR_DISPATCH, VAR_STATIC)] ULONG oInst;
486  [case(VAR_CONST)] VARIANT *lpvarValue;
487  } DUMMYUNIONNAME;
488  ELEMDESC elemdescVar;
489  WORD wVarFlags;
490  VARKIND varkind;
491} VARDESC, *LPVARDESC;
492
493typedef enum tagTYPEFLAGS {
494  TYPEFLAG_FAPPOBJECT     = 0x0001,
495  TYPEFLAG_FCANCREATE     = 0x0002,
496  TYPEFLAG_FLICENSED      = 0x0004,
497  TYPEFLAG_FPREDECLID     = 0x0008,
498  TYPEFLAG_FHIDDEN        = 0x0010,
499  TYPEFLAG_FCONTROL       = 0x0020,
500  TYPEFLAG_FDUAL          = 0x0040,
501  TYPEFLAG_FNONEXTENSIBLE = 0x0080,
502  TYPEFLAG_FOLEAUTOMATION = 0x0100,
503  TYPEFLAG_FRESTRICTED    = 0x0200,
504  TYPEFLAG_FAGGREGATABLE  = 0x0400,
505  TYPEFLAG_FREPLACEABLE   = 0x0800,
506  TYPEFLAG_FDISPATCHABLE  = 0x1000,
507  TYPEFLAG_FREVERSEBIND   = 0x2000,
508  TYPEFLAG_FPROXY         = 0x4000
509} TYPEFLAGS;
510
511typedef enum tagFUNCFLAGS {
512  FUNCFLAG_FRESTRICTED       = 0x0001,
513  FUNCFLAG_FSOURCE           = 0x0002,
514  FUNCFLAG_FBINDABLE         = 0x0004,
515  FUNCFLAG_FREQUESTEDIT      = 0x0008,
516  FUNCFLAG_FDISPLAYBIND      = 0x0010,
517  FUNCFLAG_FDEFAULTBIND      = 0x0020,
518  FUNCFLAG_FHIDDEN           = 0x0040,
519  FUNCFLAG_FUSESGETLASTERROR = 0x0080,
520  FUNCFLAG_FDEFAULTCOLLELEM  = 0x0100,
521  FUNCFLAG_FUIDEFAULT        = 0x0200,
522  FUNCFLAG_FNONBROWSABLE     = 0x0400,
523  FUNCFLAG_FREPLACEABLE      = 0x0800,
524  FUNCFLAG_FIMMEDIATEBIND    = 0x1000
525} FUNCFLAGS;
526
527typedef enum tagVARFLAGS {
528  VARFLAG_FREADONLY        = 0x0001,
529  VARFLAG_FSOURCE          = 0x0002,
530  VARFLAG_FBINDABLE        = 0x0004,
531  VARFLAG_FREQUESTEDIT     = 0x0008,
532  VARFLAG_FDISPLAYBIND     = 0x0010,
533  VARFLAG_FDEFAULTBIND     = 0x0020,
534  VARFLAG_FHIDDEN          = 0x0040,
535  VARFLAG_FRESTRICTED      = 0x0080,
536  VARFLAG_FDEFAULTCOLLELEM = 0x0100,
537  VARFLAG_FUIDEFAULT       = 0x0200,
538  VARFLAG_FNONBROWSABLE    = 0x0400,
539  VARFLAG_FREPLACEABLE     = 0x0800,
540  VARFLAG_FIMMEDIATEBIND   = 0x1000
541} VARFLAGS;
542
543typedef [wire_marshal(DWORD)] struct tagCLEANLOCALSTORAGE {
544  IUnknown *pInterface;
545  PVOID pStorage;
546  DWORD flags;
547} CLEANLOCALSTORAGE;
548
549typedef struct tagCUSTDATAITEM {
550  GUID guid;
551  VARIANTARG varValue;
552} CUSTDATAITEM, *LPCUSTDATAITEM;
553
554typedef struct tagCUSTDATA {
555  DWORD cCustData;
556  [size_is(cCustData)] LPCUSTDATAITEM prgCustData;
557} CUSTDATA, *LPCUSTDATA;
558
559} /* interface IOleAutomationTypes */
560
561/******************** INTERFACES ********************/
562
563[
564  object,
565  uuid(00020400-0000-0000-C000-000000000046),
566  pointer_default(unique)
567]
568interface IDispatch : IUnknown
569{
570  typedef [unique] IDispatch *LPDISPATCH;
571
572  const DISPID DISPID_UNKNOWN     = -1;
573  const DISPID DISPID_VALUE       =  0;
574  const DISPID DISPID_PROPERTYPUT = -3;
575  const DISPID DISPID_NEWENUM     = -4;
576  const DISPID DISPID_EVALUATE    = -5;
577  const DISPID DISPID_CONSTRUCTOR = -6;
578  const DISPID DISPID_DESTRUCTOR  = -7;
579  const DISPID DISPID_COLLECT     = -8;
580
581  HRESULT GetTypeInfoCount(
582    [out] UINT *pctinfo);
583
584  HRESULT GetTypeInfo(
585    [in] UINT iTInfo,
586    [in] LCID lcid,
587    [out] ITypeInfo **ppTInfo);
588
589  HRESULT GetIDsOfNames(
590    [in] REFIID riid,
591    [in, size_is(cNames)] LPOLESTR *rgszNames,
592    [in] UINT cNames,
593    [in] LCID lcid,
594    [out, size_is(cNames)] DISPID *rgDispId);
595
596  [local]
597  HRESULT Invoke(
598    [in] DISPID dispIdMember,
599    [in] REFIID riid,
600    [in] LCID lcid,
601    [in] WORD wFlags,
602    [in, out] DISPPARAMS *pDispParams,
603    [out] VARIANT *pVarResult,
604    [out] EXCEPINFO *pExcepInfo,
605    [out] UINT *puArgErr);
606
607  [call_as(Invoke)]
608  HRESULT RemoteInvoke(
609    [in] DISPID dispIdMember,
610    [in] REFIID riid,
611    [in] LCID lcid,
612    [in] DWORD dwFlags,
613    [in] DISPPARAMS *pDispParams,
614    [out] VARIANT *pVarResult,
615    [out] EXCEPINFO *pExcepInfo,
616    [out] UINT *pArgErr,
617    [in] UINT cVarRef,
618    [in, size_is(cVarRef)] UINT *rgVarRefIdx,
619    [in, out, size_is(cVarRef)] VARIANTARG *rgVarRef);
620}
621
622[
623  object,
624  uuid(00020404-0000-0000-C000-000000000046),
625  pointer_default(unique)
626]
627interface IEnumVARIANT : IUnknown
628{
629  typedef [unique] IEnumVARIANT *LPENUMVARIANT;
630
631  [local]
632  HRESULT Next(
633    [in] ULONG celt,
634    [out] VARIANT *rgVar,
635    [out] ULONG *pCeltFetched);
636
637  [call_as(Next)]
638  HRESULT RemoteNext(
639    [in] ULONG celt,
640    [out, size_is(celt), length_is(*pCeltFetched)]
641    VARIANT *rgVar,
642    [out] ULONG *pCeltFetched);
643
644  HRESULT Skip(
645    [in] ULONG celt);
646
647  HRESULT Reset();
648
649  HRESULT Clone(
650    [out] IEnumVARIANT **ppEnum);
651}
652
653[
654  object,
655  uuid(00020403-0000-0000-C000-000000000046),
656  pointer_default(unique)
657]
658interface ITypeComp : IUnknown
659{
660  typedef [unique] ITypeComp *LPTYPECOMP;
661
662  typedef [v1_enum] enum tagDESCKIND {
663    DESCKIND_NONE = 0,
664    DESCKIND_FUNCDESC,
665    DESCKIND_VARDESC,
666    DESCKIND_TYPECOMP,
667    DESCKIND_IMPLICITAPPOBJ,
668    DESCKIND_MAX
669  } DESCKIND;
670
671  typedef union tagBINDPTR {
672    FUNCDESC *lpfuncdesc;
673    VARDESC *lpvardesc;
674    ITypeComp *lptcomp;
675  } BINDPTR, *LPBINDPTR;
676
677  [local]
678  HRESULT Bind(
679    [in] LPOLESTR szName,
680    [in] ULONG lHashVal,
681    [in] WORD wFlags,
682    [out] ITypeInfo **ppTInfo,
683    [out] DESCKIND *pDescKind,
684    [out] BINDPTR *pBindPtr);
685
686  [call_as(Bind)]
687  HRESULT RemoteBind(
688    [in] LPOLESTR szName,
689    [in] ULONG lHashVal,
690    [in] WORD wFlags,
691    [out] ITypeInfo **ppTInfo,
692    [out] DESCKIND *pDescKind,
693    [out] LPFUNCDESC *ppFuncDesc,
694    [out] LPVARDESC *ppVarDesc,
695    [out] ITypeComp **ppTypeComp,
696    [out] CLEANLOCALSTORAGE *pDummy);
697
698  [local]
699  HRESULT BindType(
700    [in] LPOLESTR szName,
701    [in] ULONG lHashVal,
702    [out] ITypeInfo **ppTInfo,
703    [out] ITypeComp **ppTComp);
704
705  [call_as(BindType)]
706  HRESULT RemoteBindType(
707    [in] LPOLESTR szName,
708    [in] ULONG lHashVal,
709    [out] ITypeInfo **ppTInfo);
710}
711
712[
713  object,
714  uuid(00020401-0000-0000-C000-000000000046),
715  pointer_default(unique)
716]
717interface ITypeInfo : IUnknown
718{
719  typedef [unique] ITypeInfo *LPTYPEINFO;
720
721  [local]
722  HRESULT GetTypeAttr(
723    [out] TYPEATTR **ppTypeAttr);
724
725  [call_as(GetTypeAttr)]
726  HRESULT RemoteGetTypeAttr(
727    [out] LPTYPEATTR *ppTypeAttr,
728    [out] CLEANLOCALSTORAGE *pDummy);
729
730  HRESULT GetTypeComp(
731    [out] ITypeComp **ppTComp);
732
733  [local]
734  HRESULT GetFuncDesc(
735    [in] UINT index,
736    [out] FUNCDESC **ppFuncDesc);
737
738  [call_as(GetFuncDesc)]
739  HRESULT RemoteGetFuncDesc(
740    [in] UINT index,
741    [out] LPFUNCDESC *ppFuncDesc,
742    [out] CLEANLOCALSTORAGE *pDummy);
743
744  [local]
745  HRESULT GetVarDesc(
746    [in] UINT index,
747    [out] VARDESC **ppVarDesc);
748
749  [call_as(GetVarDesc)]
750  HRESULT RemoteGetVarDesc(
751    [in] UINT index,
752    [out] LPVARDESC *ppVarDesc,
753    [out] CLEANLOCALSTORAGE *pDummy);
754
755  [local]
756  HRESULT GetNames(
757    [in] MEMBERID memid,
758    [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgBstrNames,
759    [in] UINT cMaxNames,
760    [out] UINT *pcNames);
761
762  [call_as(GetNames)]
763  HRESULT RemoteGetNames(
764    [in] MEMBERID memid,
765    [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgBstrNames,
766    [in] UINT cMaxNames,
767    [out] UINT *pcNames);
768
769  HRESULT GetRefTypeOfImplType(
770    [in] UINT index,
771    [out] HREFTYPE *pRefType);
772
773  HRESULT GetImplTypeFlags(
774    [in] UINT index,
775    [out] INT *pImplTypeFlags);
776
777  [local]
778  HRESULT GetIDsOfNames(
779    [in, size_is(cNames)] LPOLESTR *rgszNames,
780    [in] UINT cNames,
781    [out, size_is(cNames)] MEMBERID *pMemId);
782
783  [call_as(GetIDsOfNames)]
784  HRESULT LocalGetIDsOfNames();
785
786  [local]
787  HRESULT Invoke(
788    [in] PVOID pvInstance,
789    [in] MEMBERID memid,
790    [in] WORD wFlags,
791    [in, out] DISPPARAMS *pDispParams,
792    [out] VARIANT *pVarResult,
793    [out] EXCEPINFO *pExcepInfo,
794    [out] UINT *puArgErr);
795
796  [call_as(Invoke)]
797  HRESULT LocalInvoke();
798
799  [local]
800  HRESULT GetDocumentation(
801    [in] MEMBERID memid,
802    [out] BSTR *pBstrName,
803    [out] BSTR *pBstrDocString,
804    [out] DWORD *pdwHelpContext,
805    [out] BSTR *pBstrHelpFile);
806
807  [call_as(GetDocumentation)]
808  HRESULT RemoteGetDocumentation(
809    [in] MEMBERID memid,
810    [in] DWORD refPtrFlags,
811    [out] BSTR *pBstrName,
812    [out] BSTR *pBstrDocString,
813    [out] DWORD *pdwHelpContext,
814    [out] BSTR *pBstrHelpFile);
815
816  [local]
817  HRESULT GetDllEntry(
818    [in] MEMBERID memid,
819    [in] INVOKEKIND invKind,
820    [out] BSTR *pBstrDllName,
821    [out] BSTR *pBstrName,
822    [out] WORD *pwOrdinal);
823
824  [call_as(GetDllEntry)]
825  HRESULT RemoteGetDllEntry(
826    [in] MEMBERID memid,
827    [in] INVOKEKIND invKind,
828    [in] DWORD refPtrFlags,
829    [out] BSTR *pBstrDllName,
830    [out] BSTR *pBstrName,
831    [out] WORD *pwOrdinal);
832
833  HRESULT GetRefTypeInfo(
834    [in] HREFTYPE hRefType,
835    [out] ITypeInfo **ppTInfo);
836
837  [local]
838  HRESULT AddressOfMember(
839    [in] MEMBERID memid,
840    [in] INVOKEKIND invKind,
841    [out] PVOID *ppv);
842
843  [call_as(AddressOfMember)]
844  HRESULT LocalAddressOfMember();
845
846  [local]
847  HRESULT CreateInstance(
848    [in] IUnknown *pUnkOuter,
849    [in] REFIID riid,
850    [out, iid_is(riid)] PVOID *ppvObj);
851
852  [call_as(CreateInstance)]
853  HRESULT RemoteCreateInstance(
854    [in] REFIID riid,
855    [out, iid_is(riid)] IUnknown **ppvObj);
856
857  HRESULT GetMops(
858    [in] MEMBERID memid,
859    [out] BSTR *pBstrMops);
860
861  [local]
862  HRESULT GetContainingTypeLib(
863    [out] ITypeLib **ppTLib,
864    [out] UINT *pIndex);
865
866  [call_as(GetContainingTypeLib)]
867  HRESULT RemoteGetContainingTypeLib(
868    [out] ITypeLib **ppTLib,
869    [out] UINT *pIndex);
870
871  [local]
872  void ReleaseTypeAttr(
873    [in] TYPEATTR *pTypeAttr);
874
875  [call_as(ReleaseTypeAttr)]
876  HRESULT LocalReleaseTypeAttr();
877
878  [local]
879  void ReleaseFuncDesc(
880    [in] FUNCDESC *pFuncDesc);
881
882  [call_as(ReleaseFuncDesc)]
883  HRESULT LocalReleaseFuncDesc();
884
885  [local]
886  void ReleaseVarDesc(
887    [in] VARDESC *pVarDesc);
888
889  [call_as(ReleaseVarDesc)]
890  HRESULT LocalReleaseVarDesc();
891}
892
893[
894  object,
895  uuid(00020412-0000-0000-C000-000000000046),
896  pointer_default(unique)
897]
898interface ITypeInfo2 : ITypeInfo
899{
900  typedef [unique] ITypeInfo2 *LPTYPEINFO2;
901
902  HRESULT GetTypeKind(
903    [out] TYPEKIND *pTypeKind);
904
905  HRESULT GetTypeFlags(
906    [out] ULONG *pTypeFlags);
907
908  HRESULT GetFuncIndexOfMemId(
909    [in] MEMBERID memid,
910    [in] INVOKEKIND invKind,
911    [out] UINT *pFuncIndex);
912
913  HRESULT GetVarIndexOfMemId(
914    [in] MEMBERID memid,
915    [out] UINT *pVarIndex);
916
917  HRESULT GetCustData(
918    [in] REFGUID guid,
919    [out] VARIANT *pVarVal);
920
921  HRESULT GetFuncCustData(
922    [in] UINT index,
923    [in] REFGUID guid,
924    [out] VARIANT *pVarVal);
925
926  HRESULT GetParamCustData(
927    [in] UINT indexFunc,
928    [in] UINT indexParam,
929    [in] REFGUID guid,
930    [out] VARIANT *pVarVal);
931
932  HRESULT GetVarCustData(
933    [in] UINT index,
934    [in] REFGUID guid,
935    [out] VARIANT *pVarVal);
936
937  HRESULT GetImplTypeCustData(
938    [in] UINT index,
939    [in] REFGUID guid,
940    [out] VARIANT *pVarVal);
941
942  [local]
943  HRESULT GetDocumentation2(
944    [in] MEMBERID memid,
945    [in] LCID lcid,
946    [out] BSTR *pbstrHelpString,
947    [out] DWORD *pdwHelpStringContext,
948    [out] BSTR *pbstrHelpStringDll);
949
950  [call_as(GetDocumentation2)]
951  HRESULT RemoteGetDocumentation2(
952    [in] MEMBERID memid,
953    [in] LCID lcid,
954    [in] DWORD refPtrFlags,
955    [out] BSTR *pbstrHelpString,
956    [out] DWORD *pdwHelpStringContext,
957    [out] BSTR *pbstrHelpStringDll);
958
959  HRESULT GetAllCustData(
960    [out] CUSTDATA *pCustData);
961
962  HRESULT GetAllFuncCustData(
963    [in] UINT index,
964    [out] CUSTDATA *pCustData);
965
966  HRESULT GetAllParamCustData(
967    [in] UINT indexFunc,
968    [in] UINT indexParam,
969    [out] CUSTDATA *pCustData);
970
971  HRESULT GetAllVarCustData(
972    [in] UINT index,
973    [out] CUSTDATA *pCustData);
974
975  HRESULT GetAllImplTypeCustData(
976    [in] UINT index,
977    [out] CUSTDATA *pCustData);
978}
979
980[
981  object,
982  uuid(00020402-0000-0000-C000-000000000046),
983  pointer_default(unique)
984]
985interface ITypeLib : IUnknown
986{
987  typedef [unique] ITypeLib *LPTYPELIB;
988
989  typedef [v1_enum] enum tagSYSKIND {
990    SYS_WIN16 = 0,
991    SYS_WIN32,
992    SYS_MAC,
993    SYS_WIN64
994  } SYSKIND;
995
996  typedef [v1_enum] enum tagLIBFLAGS {
997    LIBFLAG_FRESTRICTED   = 0x01,
998    LIBFLAG_FCONTROL      = 0x02,
999    LIBFLAG_FHIDDEN       = 0x04,
1000    LIBFLAG_FHASDISKIMAGE = 0x08
1001  } LIBFLAGS;
1002
1003  typedef struct tagTLIBATTR {
1004    GUID guid;
1005    LCID lcid;
1006    SYSKIND syskind;
1007    WORD wMajorVerNum;
1008    WORD wMinorVerNum;
1009    WORD wLibFlags;
1010  } TLIBATTR, *LPTLIBATTR;
1011
1012  [local]
1013  UINT GetTypeInfoCount();
1014
1015  [call_as(GetTypeInfoCount)]
1016  HRESULT RemoteGetTypeInfoCount(
1017    [out] UINT *pcTInfo);
1018
1019  HRESULT GetTypeInfo(
1020    [in] UINT index,
1021    [out] ITypeInfo **ppTInfo);
1022
1023  HRESULT GetTypeInfoType(
1024    [in] UINT index,
1025    [out] TYPEKIND *pTKind);
1026
1027  HRESULT GetTypeInfoOfGuid(
1028    [in] REFGUID guid,
1029    [out] ITypeInfo **ppTinfo);
1030
1031  [local]
1032  HRESULT GetLibAttr(
1033    [out] TLIBATTR **ppTLibAttr);
1034
1035  [call_as(GetLibAttr)]
1036  HRESULT RemoteGetLibAttr(
1037    [out] LPTLIBATTR *ppTLibAttr,
1038    [out] CLEANLOCALSTORAGE *pDummy);
1039
1040  HRESULT GetTypeComp(
1041    [out] ITypeComp **ppTComp);
1042
1043  [local]
1044  HRESULT GetDocumentation(
1045    [in] INT index,
1046    [out] BSTR *pBstrName,
1047    [out] BSTR *pBstrDocString,
1048    [out] DWORD *pdwHelpContext,
1049    [out] BSTR *pBstrHelpFile);
1050
1051  [call_as(GetDocumentation)]
1052  HRESULT RemoteGetDocumentation(
1053    [in] INT index,
1054    [in] DWORD refPtrFlags,
1055    [out] BSTR *pBstrName,
1056    [out] BSTR *pBstrDocString,
1057    [out] DWORD *pdwHelpContext,
1058    [out] BSTR *pBstrHelpFile);
1059
1060  [local]
1061  HRESULT IsName(
1062    [in, out] LPOLESTR szNameBuf,
1063    [in] ULONG lHashVal,
1064    [out] BOOL *pfName);
1065
1066  [call_as(IsName)]
1067  HRESULT RemoteIsName(
1068    [in] LPOLESTR szNameBuf,
1069    [in] ULONG lHashVal,
1070    [out] BOOL *pfName,
1071    [out] BSTR *pBstrLibName);
1072
1073  [local]
1074  HRESULT FindName(
1075    [in, out] LPOLESTR szNameBuf,
1076    [in] ULONG lHashVal,
1077    [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo,
1078    [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId,
1079    [in, out] USHORT *pcFound);
1080
1081  [call_as(FindName)]
1082  HRESULT RemoteFindName(
1083    [in] LPOLESTR szNameBuf,
1084    [in] ULONG lHashVal,
1085    [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo **ppTInfo,
1086    [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID *rgMemId,
1087    [in, out] USHORT *pcFound,
1088    [out] BSTR *pBstrLibName);
1089
1090  [local]
1091  void ReleaseTLibAttr(
1092    [in] TLIBATTR *pTLibAttr);
1093
1094  [call_as(ReleaseTLibAttr)]
1095  HRESULT LocalReleaseTLibAttr();
1096}
1097
1098[
1099  object,
1100  uuid(00020411-0000-0000-C000-000000000046),
1101  pointer_default(unique)
1102]
1103interface ITypeLib2 : ITypeLib
1104{
1105  typedef [unique] ITypeLib2 *LPTYPELIB2;
1106
1107  HRESULT GetCustData(
1108    [in] REFGUID guid,
1109    [out] VARIANT *pVarVal);
1110
1111  [local]
1112  HRESULT GetLibStatistics(
1113    [out] ULONG *pcUniqueNames,
1114    [out] ULONG *pcchUniqueNames);
1115
1116  [call_as(GetLibStatistics)]
1117  HRESULT RemoteGetLibStatistics(
1118    [out] ULONG *pcUniqueNames,
1119    [out] ULONG *pcchUniqueNames);
1120
1121  [local]
1122  HRESULT GetDocumentation2(
1123    [in] INT index,
1124    [in] LCID lcid,
1125    [out] BSTR *pbstrHelpString,
1126    [out] DWORD *pdwHelpStringContext,
1127    [out] BSTR *pbstrHelpStringDll);
1128
1129  [call_as(GetDocumentation2)]
1130  HRESULT RemoteGetDocumentation2(
1131    [in] INT index,
1132    [in] LCID lcid,
1133    [in] DWORD refPtrFlags,
1134    [out] BSTR *pbstrHelpString,
1135    [out] DWORD *pdwHelpStringContext,
1136    [out] BSTR *pbstrHelpStringDll);
1137
1138  HRESULT GetAllCustData(
1139    [out] CUSTDATA *pCustData);
1140}
1141
1142[
1143  local,
1144  object,
1145  uuid(00020410-0000-0000-C000-000000000046),
1146  pointer_default(unique)
1147]
1148interface ITypeChangeEvents : IUnknown
1149{
1150  typedef [unique] ITypeChangeEvents *LPTYPECHANGEEVENTS;
1151
1152  typedef enum tagCHANGEKIND {
1153    CHANGEKIND_ADDMEMBER,
1154    CHANGEKIND_DELETEMEMBER,
1155    CHANGEKIND_SETNAMES,
1156    CHANGEKIND_SETDOCUMENTATION,
1157    CHANGEKIND_GENERAL,
1158    CHANGEKIND_INVALIDATE,
1159    CHANGEKIND_CHANGEFAILED,
1160    CHANGEKIND_MAX
1161  } CHANGEKIND;
1162
1163  HRESULT RequestTypeChange(
1164    [in] CHANGEKIND changeKind,
1165    [in] ITypeInfo *pTInfoBefore,
1166    [in] LPOLESTR pStrName,
1167    [out] INT *pfCancel);
1168
1169  HRESULT AfterTypeChange(
1170    [in] CHANGEKIND changeKind,
1171    [in] ITypeInfo *pTInfoAfter,
1172    [in] LPOLESTR pStrName);
1173}
1174
1175[
1176  object,
1177  uuid(1CF2B120-547D-101B-8E65-08002B2BD119),
1178  pointer_default(unique)
1179]
1180interface IErrorInfo : IUnknown
1181{
1182  typedef [unique] IErrorInfo *LPERRORINFO;
1183
1184  HRESULT GetGUID(
1185    [out] GUID *pGUID);
1186
1187  HRESULT GetSource(
1188    [out] BSTR *pBstrSource);
1189
1190  HRESULT GetDescription(
1191    [out] BSTR *pBstrDescription);
1192
1193  HRESULT GetHelpFile(
1194    [out] BSTR *pBstrHelpFile);
1195
1196  HRESULT GetHelpContext(
1197    [out] DWORD *pdwHelpContext);
1198}
1199
1200[
1201  object,
1202  uuid(22F03340-547D-101B-8E65-08002B2BD119),
1203  pointer_default(unique)
1204]
1205interface ICreateErrorInfo : IUnknown
1206{
1207  typedef [unique] ICreateErrorInfo *LPCREATEERRORINFO;
1208
1209  HRESULT SetGUID(
1210    [in] REFGUID rguid);
1211
1212  HRESULT SetSource(
1213    [in] LPOLESTR szSource);
1214
1215  HRESULT SetDescription(
1216    [in] LPOLESTR szDescription);
1217
1218  HRESULT SetHelpFile(
1219    [in] LPOLESTR szHelpFile);
1220
1221  HRESULT SetHelpContext(
1222    [in] DWORD dwHelpContext);
1223}
1224
1225[
1226  object,
1227  uuid(DF0B3D60-548F-101B-8E65-08002B2BD119),
1228  pointer_default(unique)
1229]
1230interface ISupportErrorInfo : IUnknown
1231{
1232  typedef [unique] ISupportErrorInfo *LPSUPPORTERRORINFO;
1233
1234  HRESULT InterfaceSupportsErrorInfo(
1235    [in] REFIID riid);
1236}
1237
1238[
1239  object,
1240  uuid(0000002E-0000-0000-C000-000000000046)
1241]
1242interface ITypeFactory : IUnknown
1243{
1244  HRESULT CreateFromTypeInfo(
1245    [in] ITypeInfo *pTypeInfo,
1246    [in] REFIID riid,
1247    [out, iid_is(riid)] IUnknown **ppv);
1248}
1249
1250[
1251  local,
1252  object,
1253  uuid(0000002D-0000-0000-C000-000000000046)
1254]
1255interface ITypeMarshal : IUnknown
1256{
1257  HRESULT Size(
1258    [in] PVOID pvType,
1259    [in] DWORD dwDestContext,
1260    [in] PVOID pvDestContext,
1261    [out] ULONG *pSize);
1262
1263  HRESULT Marshal(
1264    [in] PVOID pvType,
1265    [in] DWORD dwDestContext,
1266    [in] PVOID pvDestContext,
1267    [in] ULONG cbBufferLength,
1268    [out] BYTE *pBuffer,
1269    [out] ULONG *pcbWritten);
1270
1271  HRESULT Unmarshal(
1272    [out] PVOID pvType,
1273    [in] DWORD dwFlags,
1274    [in] ULONG cbBufferLength,
1275    [in] BYTE *pBuffer,
1276    [out] ULONG *pcbRead);
1277
1278  HRESULT Free(
1279    [in] PVOID pvType);
1280}
1281
1282[
1283  local,
1284  object,
1285  uuid(0000002F-0000-0000-C000-000000000046)
1286]
1287interface IRecordInfo : IUnknown
1288{
1289  typedef [unique] IRecordInfo *LPRECORDINFO;
1290
1291  HRESULT RecordInit(
1292    [out] PVOID pvNew);
1293
1294  HRESULT RecordClear(
1295    [in] PVOID pvExisting);
1296
1297  HRESULT RecordCopy(
1298    [in] PVOID pvExisting,
1299    [out] PVOID pvNew);
1300
1301  HRESULT GetGuid(
1302    [out] GUID *pguid);
1303
1304  HRESULT GetName(
1305    [out] BSTR *pbstrName);
1306
1307  HRESULT GetSize(
1308    [out] ULONG *pcbSize);
1309
1310  HRESULT GetTypeInfo(
1311    [out] ITypeInfo **ppTypeInfo);
1312
1313  HRESULT GetField(
1314    [in] PVOID pvData,
1315    [in] LPCOLESTR szFieldName,
1316    [out] VARIANT *pvarField);
1317
1318  HRESULT GetFieldNoCopy(
1319    [in] PVOID pvData,
1320    [in] LPCOLESTR szFieldName,
1321    [out] VARIANT *pvarField,
1322    [out] PVOID *ppvDataCArray);
1323
1324  HRESULT PutField(
1325    [in] ULONG wFlags,
1326    [in, out] PVOID pvData,
1327    [in] LPCOLESTR szFieldName,
1328    [in] VARIANT *pvarField);
1329
1330  HRESULT PutFieldNoCopy(
1331    [in] ULONG wFlags,
1332    [in, out] PVOID pvData,
1333    [in] LPCOLESTR szFieldName,
1334    [in] VARIANT *pvarField);
1335
1336  HRESULT GetFieldNames(
1337    [in, out] ULONG *pcNames,
1338    [out, size_is(*pcNames), length_is(*pcNames)] BSTR *rgBstrNames);
1339
1340  BOOL IsMatchingType(
1341    [in] IRecordInfo *pRecordInfo);
1342
1343  PVOID RecordCreate();
1344
1345  HRESULT RecordCreateCopy(
1346    [in] PVOID pvSource,
1347    [out] PVOID *ppvDest);
1348
1349  HRESULT RecordDestroy(
1350    [in] PVOID pvRecord);
1351}
1352
1353[
1354  local,
1355  object,
1356  uuid(00020405-0000-0000-C000-000000000046),
1357  pointer_default(unique)
1358]
1359interface ICreateTypeInfo : IUnknown
1360{
1361  typedef [unique] ICreateTypeInfo *LPCREATETYPEINFO;
1362
1363  HRESULT SetGuid(
1364    [in] REFGUID guid);
1365
1366  HRESULT SetTypeFlags(
1367    [in] UINT uTypeFlags);
1368
1369  HRESULT SetDocString(
1370    [in] LPOLESTR pStrDoc);
1371
1372  HRESULT SetHelpContext(
1373    [in] DWORD dwHelpContext);
1374
1375  HRESULT SetVersion(
1376    [in] WORD wMajorVerNum,
1377    [in] WORD wMinorVerNum);
1378
1379  HRESULT AddRefTypeInfo(
1380    [in] ITypeInfo *pTInfo,
1381    [in] HREFTYPE *phRefType);
1382
1383  HRESULT AddFuncDesc(
1384    [in] UINT index,
1385    [in] FUNCDESC *pFuncDesc);
1386
1387  HRESULT AddImplType(
1388    [in] UINT index,
1389    [in] HREFTYPE hRefType);
1390
1391  HRESULT SetImplTypeFlags(
1392    [in] UINT index,
1393    [in] INT implTypeFlags);
1394
1395  HRESULT SetAlignment(
1396    [in] WORD cbAlignment);
1397
1398  HRESULT SetSchema(
1399    [in] LPOLESTR pStrSchema);
1400
1401  HRESULT AddVarDesc(
1402    [in] UINT index,
1403    [in] VARDESC *pVarDesc);
1404
1405  HRESULT SetFuncAndParamNames(
1406    [in] UINT index,
1407    [in, size_is(cNames)] LPOLESTR *rgszNames,
1408    [in] UINT cNames);
1409
1410  HRESULT SetVarName(
1411    [in] UINT index,
1412    [in] LPOLESTR szName);
1413
1414  HRESULT SetTypeDescAlias(
1415    [in] TYPEDESC *pTDescAlias);
1416
1417  HRESULT DefineFuncAsDllEntry(
1418    [in] UINT index,
1419    [in] LPOLESTR szDllName,
1420    [in] LPOLESTR szProcName);
1421
1422  HRESULT SetFuncDocString(
1423    [in] UINT index,
1424    [in] LPOLESTR szDocString);
1425
1426  HRESULT SetVarDocString(
1427    [in] UINT index,
1428    [in] LPOLESTR szDocString);
1429
1430  HRESULT SetFuncHelpContext(
1431    [in] UINT index,
1432    [in] DWORD dwHelpContext);
1433
1434  HRESULT SetVarHelpContext(
1435    [in] UINT index,
1436    [in] DWORD dwHelpContext);
1437
1438  HRESULT SetMops(
1439    [in] UINT index,
1440    [in] BSTR bstrMops);
1441
1442  HRESULT SetTypeIdldesc(
1443    [in] IDLDESC * pIdlDesc);
1444
1445  HRESULT LayOut();
1446}
1447
1448[
1449  local,
1450  object,
1451  uuid(0002040E-0000-0000-C000-000000000046),
1452  pointer_default(unique)
1453]
1454interface ICreateTypeInfo2 : ICreateTypeInfo
1455{
1456  typedef [unique] ICreateTypeInfo2 *LPCREATETYPEINFO2;
1457
1458  HRESULT DeleteFuncDesc(
1459    [in] UINT index);
1460
1461  HRESULT DeleteFuncDescByMemId(
1462    [in] MEMBERID memid,
1463    [in] INVOKEKIND invKind);
1464
1465  HRESULT DeleteVarDesc(
1466    [in] UINT index);
1467
1468  HRESULT DeleteVarDescByMemId(
1469    [in] MEMBERID memid);
1470
1471  HRESULT DeleteImplType(
1472    [in] UINT index);
1473
1474  HRESULT SetCustData(
1475    [in] REFGUID guid,
1476    [in] VARIANT *pVarVal);
1477
1478  HRESULT SetFuncCustData(
1479    [in] UINT index,
1480    [in] REFGUID guid,
1481    [in] VARIANT *pVarVal);
1482
1483  HRESULT SetParamCustData(
1484    [in] UINT indexFunc,
1485    [in] UINT indexParam,
1486    [in] REFGUID guid,
1487    [in] VARIANT *pVarVal);
1488
1489  HRESULT SetVarCustData(
1490    [in] UINT index,
1491    [in] REFGUID guid,
1492    [in] VARIANT *pVarVal);
1493
1494  HRESULT SetImplTypeCustData(
1495    [in] UINT index,
1496    [in] REFGUID guid,
1497    [in] VARIANT *pVarVal);
1498
1499  HRESULT SetHelpStringContext(
1500    [in] ULONG dwHelpStringContext);
1501
1502  HRESULT SetFuncHelpStringContext(
1503    [in] UINT index,
1504    [in] ULONG dwHelpStringContext);
1505
1506  HRESULT SetVarHelpStringContext(
1507    [in] UINT index,
1508    [in] ULONG dwHelpStringContext);
1509
1510  HRESULT Invalidate();
1511
1512  HRESULT SetName(
1513    [in] LPOLESTR szName);
1514}
1515
1516[
1517  local,
1518  object,
1519  uuid(00020406-0000-0000-C000-000000000046),
1520  pointer_default(unique)
1521]
1522interface ICreateTypeLib : IUnknown
1523{
1524  typedef [unique] ICreateTypeLib *LPCREATETYPELIB;
1525
1526  HRESULT CreateTypeInfo(
1527    [in] LPOLESTR szName,
1528    [in] TYPEKIND tkind,
1529    [out] ICreateTypeInfo **ppCTInfo);
1530
1531  HRESULT SetName(
1532    [in] LPOLESTR szName);
1533
1534  HRESULT SetVersion(
1535    [in] WORD wMajorVerNum,
1536    [in] WORD wMinorVerNum);
1537
1538  HRESULT SetGuid(
1539    [in] REFGUID guid);
1540
1541  HRESULT SetDocString(
1542    [in] LPOLESTR szDoc);
1543
1544  HRESULT SetHelpFileName(
1545    [in] LPOLESTR szHelpFileName);
1546
1547  HRESULT SetHelpContext(
1548    [in] DWORD dwHelpContext);
1549
1550  HRESULT SetLcid(
1551    [in] LCID lcid);
1552
1553  HRESULT SetLibFlags(
1554    [in] UINT uLibFlags);
1555
1556  HRESULT SaveAllChanges();
1557}
1558
1559[
1560  local,
1561  object,
1562  uuid(0002040F-0000-0000-C000-000000000046),
1563  pointer_default(unique)
1564]
1565interface ICreateTypeLib2 : ICreateTypeLib
1566{
1567  typedef [unique] ICreateTypeLib2 *LPCREATETYPELIB2;
1568
1569  HRESULT DeleteTypeInfo(
1570    [in] LPOLESTR szName);
1571
1572  HRESULT SetCustData(
1573    [in] REFGUID guid,
1574    [in] VARIANT *pVarVal);
1575
1576  HRESULT SetHelpStringContext(
1577    [in] ULONG dwHelpStringContext);
1578
1579  HRESULT SetHelpStringDll(
1580    [in] LPOLESTR szFileName);
1581}
1582
1583
1584/*****************************************************************************
1585 * IErrorLog interface
1586 */
1587[
1588  object,
1589  uuid(3127ca40-446e-11ce-8135-00aa004bb851),
1590  pointer_default(unique)
1591]
1592interface IErrorLog : IUnknown
1593{
1594  typedef IErrorLog *LPERRORLOG;
1595
1596  HRESULT AddError(
1597    [in] LPCOLESTR pszPropName,
1598    [in] EXCEPINFO *pExcepInfo);
1599}
1600
1601
1602/*****************************************************************************
1603 * IPropertyBag interface
1604 */
1605[
1606  object,
1607  uuid(55272a00-42cb-11ce-8135-00aa004bb851),
1608  pointer_default(unique)
1609]
1610interface IPropertyBag : IUnknown
1611{
1612  typedef IPropertyBag *LPPROPERTYBAG;
1613
1614  [local]
1615  HRESULT Read(
1616    [in] LPCOLESTR pszPropName,
1617    [in, out] VARIANT *pVar,
1618    [in] IErrorLog *pErrorLog);
1619
1620  [call_as(Read)]
1621  HRESULT RemoteRead(
1622    [in] LPCOLESTR pszPropName,
1623    [out] VARIANT *pVar,
1624    [in] IErrorLog *pErrorLog,
1625    [in] DWORD varType,
1626    [in] IUnknown *pUnkObj);
1627
1628  HRESULT Write(
1629    [in] LPCOLESTR pszPropName,
1630    [in] VARIANT *pVar);
1631}
1632