1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! Mappings for the contents of OAIdl.h
7 use shared::basetsd::ULONG_PTR;
8 use shared::guiddef::{GUID, IID, REFGUID, REFIID};
9 use shared::minwindef::{BOOL, BYTE, DWORD, FLOAT, INT, UINT, ULONG, USHORT, WORD};
10 use shared::rpcndr::byte;
11 use shared::wtypes::{
12     BSTR, CY, DATE, DECIMAL, VARIANT_BOOL, VARTYPE, VT_BSTR, VT_DISPATCH, VT_ERROR,
13     VT_I1, VT_I2, VT_I4, VT_I8, VT_RECORD, VT_RESERVED, VT_UNKNOWN, VT_VARIANT,
14     wireBSTR
15 };
16 use shared::wtypesbase::{
17     BYTE_SIZEDARR, DOUBLE, DWORD_SIZEDARR, HYPER_SIZEDARR, LPCOLESTR, LPOLESTR, SCODE,
18     WORD_SIZEDARR
19 };
20 use um::unknwnbase::{IUnknown, IUnknownVtbl};
21 use um::winnt::{CHAR, HRESULT, LCID, LONG, LONGLONG, PVOID, SHORT, ULONGLONG};
22 pub type CURRENCY = CY;
23 STRUCT!{struct SAFEARRAYBOUND {
24     cElements: ULONG,
25     lLbound: LONG,
26 }}
27 pub type LPSAFEARRAYBOUND = *mut SAFEARRAYBOUND;
28 pub type wireBRECORD = *mut _wireBRECORD;
29 pub type wireVARIANT = *mut _wireVARIANT;
30 STRUCT!{struct SAFEARR_BSTR {
31     Size: ULONG,
32     aBstr: *mut wireBSTR,
33 }}
34 STRUCT!{struct SAFEARR_UNKNOWN {
35     Size: ULONG,
36     apUnknown: *mut *mut IUnknown,
37 }}
38 STRUCT!{struct SAFEARR_DISPATCH {
39     Size: ULONG,
40     apDispatch: *mut *mut IDispatch,
41 }}
42 STRUCT!{struct SAFEARR_VARIANT {
43     Size: ULONG,
44     aVariant: *mut wireVARIANT,
45 }}
46 STRUCT!{struct SAFEARR_BRECORD {
47     Size: ULONG,
48     aRecord: *mut wireBRECORD,
49 }}
50 STRUCT!{struct SAFEARR_HAVEIID {
51     Size: ULONG,
52     apUnknown: *mut *mut IUnknown,
53     iid: IID,
54 }}
55 ENUM!{enum SF_TYPE {
56     SF_ERROR = VT_ERROR,
57     SF_I1 = VT_I1,
58     SF_I2 = VT_I2,
59     SF_I4 = VT_I4,
60     SF_I8 = VT_I8,
61     SF_BSTR = VT_BSTR,
62     SF_UNKNOWN = VT_UNKNOWN,
63     SF_DISPATCH = VT_DISPATCH,
64     SF_VARIANT = VT_VARIANT,
65     SF_RECORD = VT_RECORD,
66     SF_HAVEIID = VT_UNKNOWN | VT_RESERVED,
67 }}
68 #[cfg(target_pointer_width = "32")]
69 UNION!{union __MIDL_IOleAutomationTypes_0001 {
70     [u32; 6],
71     BstrStr BstrStr_mut: SAFEARR_BSTR,
72     UnknownStr UnknownStr_mut: SAFEARR_UNKNOWN,
73     DispatchStr DispatchStr_mut: SAFEARR_DISPATCH,
74     VariantStr VariantStr_mut: SAFEARR_VARIANT,
75     RecordStr RecordStr_mut: SAFEARR_BRECORD,
76     HaveIidStr HaveIidStr_mut: SAFEARR_HAVEIID,
77     ByteStr ByteStr_mut: BYTE_SIZEDARR,
78     WordStr WordStr_mut: WORD_SIZEDARR,
79     LongStr LongStr_mut: DWORD_SIZEDARR,
80     HyperStr HyperStr_mut: HYPER_SIZEDARR,
81 }}
82 #[cfg(target_pointer_width = "64")]
83 UNION!{union __MIDL_IOleAutomationTypes_0001 {
84     [u64; 4],
85     BstrStr BstrStr_mut: SAFEARR_BSTR,
86     UnknownStr UnknownStr_mut: SAFEARR_UNKNOWN,
87     DispatchStr DispatchStr_mut: SAFEARR_DISPATCH,
88     VariantStr VariantStr_mut: SAFEARR_VARIANT,
89     RecordStr RecordStr_mut: SAFEARR_BRECORD,
90     HaveIidStr HaveIidStr_mut: SAFEARR_HAVEIID,
91     ByteStr ByteStr_mut: BYTE_SIZEDARR,
92     WordStr WordStr_mut: WORD_SIZEDARR,
93     LongStr LongStr_mut: DWORD_SIZEDARR,
94     HyperStr HyperStr_mut: HYPER_SIZEDARR,
95 }}
96 STRUCT!{struct SAFEARRAYUNION {
97     sfType: ULONG,
98     u: __MIDL_IOleAutomationTypes_0001,
99 }}
100 STRUCT!{struct _wireSAFEARRAY {
101     cDims: USHORT,
102     fFeatures: USHORT,
103     cbElements: ULONG,
104     cLocks: ULONG,
105     uArrayStructs: SAFEARRAYUNION,
106     rgsaBound: [SAFEARRAYBOUND; 1],
107 }}
108 pub type wireSAFEARRAY = *mut _wireSAFEARRAY;
109 pub type wirePSAFEARRAY = *mut wireSAFEARRAY;
110 STRUCT!{struct SAFEARRAY {
111     cDims: USHORT,
112     fFeatures: USHORT,
113     cbElements: ULONG,
114     cLocks: ULONG,
115     pvData: PVOID,
116     rgsabound: [SAFEARRAYBOUND; 1],
117 }}
118 pub type LPSAFEARRAY = *mut SAFEARRAY;
119 pub const FADF_AUTO: DWORD = 0x1;
120 pub const FADF_STATIC: DWORD = 0x2;
121 pub const FADF_EMBEDDED: DWORD = 0x4;
122 pub const FADF_FIXEDSIZE: DWORD = 0x10;
123 pub const FADF_RECORD: DWORD = 0x20;
124 pub const FADF_HAVEIID: DWORD = 0x40;
125 pub const FADF_HAVEVARTYPE: DWORD = 0x80;
126 pub const FADF_BSTR: DWORD = 0x100;
127 pub const FADF_UNKNOWN: DWORD = 0x200;
128 pub const FADF_DISPATCH: DWORD = 0x400;
129 pub const FADF_VARIANT: DWORD = 0x800;
130 pub const FADF_RESERVED: DWORD = 0xf008;
131 STRUCT!{struct __tagBRECORD {
132     pvRecord: PVOID,
133     pRecInfo: *mut IRecordInfo,
134 }}
135 UNION!{union VARIANT_n3 {
136     [u64; 1] [u64; 2],
137     llVal llVal_mut: LONGLONG,
138     lVal lVal_mut: LONG,
139     bVal bVal_mut: BYTE,
140     iVal iVal_mut: SHORT,
141     fltVal fltVal_mut: FLOAT,
142     dblVal dblVal_mut: DOUBLE,
143     boolVal boolVal_mut: VARIANT_BOOL,
144     scode scode_mut: SCODE,
145     cyVal cyVal_mut: CY,
146     date date_mut: DATE,
147     bstrVal bstrVal_mut: BSTR,
148     punkVal punkVal_mut: *mut IUnknown,
149     pdispVal pdispVal_mut: *mut IDispatch,
150     parray parray_mut: *mut SAFEARRAY,
151     pbVal pbVal_mut: *mut BYTE,
152     piVal piVal_mut: *mut SHORT,
153     plVal plVal_mut: *mut LONG,
154     pllVal pllVal_mut: *mut LONGLONG,
155     pfltVal pfltVal_mut: *mut FLOAT,
156     pdblVal pdblVal_mut: *mut DOUBLE,
157     pboolVal pboolVal_mut: *mut VARIANT_BOOL,
158     pscode pscode_mut: *mut SCODE,
159     pcyVal pcyVal_mut: *mut CY,
160     pdate pdate_mut: *mut DATE,
161     pbstrVal pbstrVal_mut: *mut BSTR,
162     ppunkVal ppunkVal_mut: *mut *mut IUnknown,
163     ppdispVal ppdispVal_mut: *mut *mut IDispatch,
164     pparray pparray_mut: *mut *mut SAFEARRAY,
165     pvarVal pvarVal_mut: *mut VARIANT,
166     byref byref_mut: PVOID,
167     cVal cVal_mut: CHAR,
168     uiVal uiVal_mut: USHORT,
169     ulVal ulVal_mut: ULONG,
170     ullVal ullVal_mut: ULONGLONG,
171     intVal intVal_mut: INT,
172     uintVal uintVal_mut: UINT,
173     pdecVal pdecVal_mut: *mut DECIMAL,
174     pcVal pcVal_mut: *mut CHAR,
175     puiVal puiVal_mut: *mut USHORT,
176     pulVal pulVal_mut: *mut ULONG,
177     pullVal pullVal_mut: *mut ULONGLONG,
178     pintVal pintVal_mut: *mut INT,
179     puintVal puintVal_mut: *mut UINT,
180     n4 n4_mut: __tagBRECORD,
181 }}
182 STRUCT!{struct __tagVARIANT {
183     vt: VARTYPE,
184     wReserved1: WORD,
185     wReserved2: WORD,
186     wReserved3: WORD,
187     n3: VARIANT_n3,
188 }}
189 UNION!{union VARIANT_n1 {
190     [u64; 2] [u64; 3],
191     n2 n2_mut: __tagVARIANT,
192     decVal decVal_mut: DECIMAL,
193 }}
194 STRUCT!{struct VARIANT {
195     n1: VARIANT_n1,
196 }}
197 pub type LPVARIANT = *mut VARIANT;
198 pub type VARIANTARG = VARIANT;
199 pub type LPVARIANTARG = *mut VARIANT;
200 pub type REFVARIANT = *const VARIANT;
201 STRUCT!{struct _wireBRECORD {
202     fFlags: ULONG,
203     clSize: ULONG,
204     pRecInfo: *mut IRecordInfo,
205     pRecord: *mut byte,
206 }}
207 UNION!{union _wireVARIANT_u {
208     [u64; 2],
209     llVal llVal_mut: LONGLONG,
210     lVal lVal_mut: LONG,
211     bVal bVal_mut: BYTE,
212     iVal iVal_mut: SHORT,
213     fltVal fltVal_mut: FLOAT,
214     dblVal dblVal_mut: DOUBLE,
215     boolVal boolVal_mut: VARIANT_BOOL,
216     scode scode_mut: SCODE,
217     cyVal cyVal_mut: CY,
218     date date_mut: DATE,
219     bstrVal bstrVal_mut: wireBSTR,
220     punkVal punkVal_mut: *mut IUnknown,
221     pdispVal pdispVal_mut: *mut IDispatch,
222     parray parray_mut: wirePSAFEARRAY,
223     brecVal brecVal_mut: wireBRECORD,
224     pbVal pbVal_mut: *mut BYTE,
225     piVal piVal_mut: *mut SHORT,
226     plVal plVal_mut: *mut LONG,
227     pllVal pllVal_mut: *mut LONGLONG,
228     pfltVal pfltVal_mut: *mut FLOAT,
229     pdblVal pdblVal_mut: *mut DOUBLE,
230     pboolVal pboolVal_mut: *mut VARIANT_BOOL,
231     pscode pscode_mut: *mut SCODE,
232     pcyVal pcyVal_mut: *mut CY,
233     pdate pdate_mut: *mut DATE,
234     pbstrVal pbstrVal_mut: *mut wireBSTR,
235     ppunkVal ppunkVal_mut: *mut *mut IUnknown,
236     ppdispVal ppdispVal_mut: *mut *mut IDispatch,
237     pparray pparray_mut: *mut wirePSAFEARRAY,
238     pvarVal pvarVal_mut: *mut wireVARIANT,
239     cVal cVal_mut: CHAR,
240     uiVal uiVal_mut: USHORT,
241     ulVal ulVal_mut: ULONG,
242     ullVal ullVal_mut: ULONGLONG,
243     intVal intVal_mut: INT,
244     uintVal uintVal_mut: UINT,
245     decVal decVal_mut: DECIMAL,
246     pdecVal pdecVal_mut: *mut DECIMAL,
247     pcVal pcVal_mut: *mut CHAR,
248     puiVal puiVal_mut: *mut USHORT,
249     pulVal pulVal_mut: *mut ULONG,
250     pullVal pullVal_mut: *mut ULONGLONG,
251     pintVal pintVal_mut: *mut INT,
252     puintVal puintVal_mut: *mut UINT,
253 }}
254 STRUCT!{struct _wireVARIANT {
255     clSize: DWORD,
256     rpcReserved: DWORD,
257     vt: USHORT,
258     wReserved1: USHORT,
259     wReserved2: USHORT,
260     wReserved3: USHORT,
261     u: _wireVARIANT_u,
262 }}
263 pub type DISPID = LONG;
264 pub type MEMBERID = DISPID;
265 pub type HREFTYPE = DWORD;
266 ENUM!{enum TYPEKIND {
267     TKIND_ENUM = 0,
268     TKIND_RECORD,
269     TKIND_MODULE,
270     TKIND_INTERFACE,
271     TKIND_DISPATCH,
272     TKIND_COCLASS,
273     TKIND_ALIAS,
274     TKIND_UNION,
275     TKIND_MAX,
276 }}
277 UNION!{union TYPEDESC_u {
278     [usize; 1],
279     lptdesc lptdesc_mut: *mut TYPEDESC,
280     lpadesc lpadesc_mut: *mut ARRAYDESC,
281     hreftype hreftype_mut: HREFTYPE,
282 }}
283 STRUCT!{struct TYPEDESC {
284     u: TYPEDESC_u,
285     vt: VARTYPE,
286 }}
287 STRUCT!{struct ARRAYDESC {
288     tdescElem: TYPEDESC,
289     cDims: USHORT,
290     rgbounds: [SAFEARRAYBOUND; 1],
291 }}
292 STRUCT!{struct PARAMDESCEX {
293     cBytes: ULONG,
294     varDefaultValue: VARIANTARG,
295 }}
296 pub type LPPARAMDESCEX = *mut PARAMDESCEX;
297 STRUCT!{struct PARAMDESC {
298     pparamdescex: LPPARAMDESCEX,
299     wParamFlags: USHORT,
300 }}
301 pub type LPPARAMDESC = *mut PARAMDESC;
302 pub const PARAMFLAG_NONE: DWORD = 0;
303 pub const PARAMFLAG_FIN: DWORD = 0x1;
304 pub const PARAMFLAG_FOUT: DWORD = 0x2;
305 pub const PARAMFLAG_FLCID: DWORD = 0x4;
306 pub const PARAMFLAG_FRETVAL: DWORD = 0x8;
307 pub const PARAMFLAG_FOPT: DWORD = 0x10;
308 pub const PARAMFLAG_FHASDEFAULT: DWORD = 0x20;
309 pub const PARAMFLAG_FHASCUSTDATA: DWORD = 0x40;
310 STRUCT!{struct IDLDESC {
311     dwReserved: ULONG_PTR,
312     wIDLFlags: USHORT,
313 }}
314 pub type LPIDLDESC = *mut IDLDESC;
315 pub const IDLFLAG_NONE: DWORD = PARAMFLAG_NONE;
316 pub const IDLFLAG_FIN: DWORD = PARAMFLAG_FIN;
317 pub const IDLFLAG_FOUT: DWORD = PARAMFLAG_FOUT;
318 pub const IDLFLAG_FLCID: DWORD = PARAMFLAG_FLCID;
319 pub const IDLFLAG_FRETVAL: DWORD = PARAMFLAG_FRETVAL;
320 UNION!{union ELEMDESC_u {
321     [usize; 2],
322     idldesc idldesc_mut: IDLDESC,
323     paramdesc paramdesc_mut: PARAMDESC,
324 }}
325 STRUCT!{struct ELEMDESC {
326     tdesc: TYPEDESC,
327     u: ELEMDESC_u,
328 }}
329 pub type LPELEMDESC = *mut ELEMDESC;
330 STRUCT!{struct TYPEATTR {
331     guid: GUID,
332     lcid: LCID,
333     dwReserved: DWORD,
334     memidConstructor: MEMBERID,
335     memidDestructor: MEMBERID,
336     lpstrSchema: LPOLESTR,
337     cbSizeInstance: ULONG,
338     typekind: TYPEKIND,
339     cFuncs: WORD,
340     cVars: WORD,
341     cImplTypes: WORD,
342     cbSizeVft: WORD,
343     cbAlignment: WORD,
344     wTypeFlags: WORD,
345     wMajorVerNum: WORD,
346     wMinorVerNum: WORD,
347     tdescAlias: TYPEDESC,
348     idldescType: IDLDESC,
349 }}
350 pub type LPTYPEATTR = *mut TYPEATTR;
351 STRUCT!{struct DISPPARAMS {
352     rgvarg: *mut VARIANTARG,
353     rgdispidNamedArgs: *mut DISPID,
354     cArgs: UINT,
355     cNamedArgs: UINT,
356 }}
357 STRUCT!{struct EXCEPINFO {
358     wCode: WORD,
359     wReserved: WORD,
360     bstrSource: BSTR,
361     bstrDescription: BSTR,
362     bstrHelpFile: BSTR,
363     dwHelpContext: DWORD,
364     pvReserved: PVOID,
365     pfnDeferredFillIn: Option<unsafe extern "system" fn(
366         einfo: *mut EXCEPINFO,
367     ) -> HRESULT>,
368     scode: SCODE,
369 }}
370 ENUM!{enum CALLCONV {
371     CC_FASTCALL = 0,
372     CC_CDECL = 1,
373     CC_MSCPASCAL,
374     CC_PASCAL,
375     CC_MACPASCAL,
376     CC_STDCALL,
377     CC_FPFASTCALL,
378     CC_SYSCALL,
379     CC_MPWCDECL,
380     CC_MPWPASCAL,
381     CC_MAX,
382 }}
383 ENUM!{enum FUNCKIND {
384     FUNC_VIRTUAL = 0,
385     FUNC_PUREVIRTUAL,
386     FUNC_NONVIRTUAL,
387     FUNC_STATIC,
388     FUNC_DISPATCH,
389 }}
390 ENUM!{enum INVOKEKIND {
391     INVOKE_FUNC = 1,
392     INVOKE_PROPERTYGET = 2,
393     INVOKE_PROPERTYPUT = 4,
394     INVOKE_PROPERTYPUTREF = 8,
395 }}
396 STRUCT!{struct FUNCDESC {
397     memid: MEMBERID,
398     lprgscode: *mut SCODE,
399     lprgelemdescParam: *mut ELEMDESC,
400     funckind: FUNCKIND,
401     invkind: INVOKEKIND,
402     callconv: CALLCONV,
403     cParams: SHORT,
404     cParamsOpt: SHORT,
405     oVft: SHORT,
406     cScodes: SHORT,
407     elemdescFunc: ELEMDESC,
408     wFuncFlags: WORD,
409 }}
410 pub type LPFUNCDESC = *mut FUNCDESC;
411 ENUM!{enum VARKIND {
412     VAR_PERINSTANCE = 0,
413     VAR_STATIC,
414     VAR_CONST,
415     VAR_DISPATCH,
416 }}
417 pub const IMPLTYPEFLAG_FDEFAULT: DWORD = 0x1;
418 pub const IMPLTYPEFLAG_FSOURCE: DWORD = 0x2;
419 pub const IMPLTYPEFLAG_FRESTRICTED: DWORD = 0x4;
420 pub const IMPLTYPEFLAG_FDEFAULTVTABLE: DWORD = 0x8;
421 UNION!{union VARDESC_u {
422     [usize; 1],
423     oInst oInst_mut: ULONG,
424     lpvarValue lpvarValue_mut: *mut VARIANT,
425 }}
426 STRUCT!{struct VARDESC {
427     memid: MEMBERID,
428     lpstrSchema: LPOLESTR,
429     u: VARDESC_u,
430     elemdescVar: ELEMDESC,
431     wVarFlags: WORD,
432     varkind: VARKIND,
433 }}
434 pub type LPVARDESC = *mut VARDESC;
435 ENUM!{enum TYPEFLAGS {
436     TYPEFLAG_FAPPOBJECT = 0x1,
437     TYPEFLAG_FCANCREATE = 0x2,
438     TYPEFLAG_FLICENSED = 0x4,
439     TYPEFLAG_FPREDECLID = 0x8,
440     TYPEFLAG_FHIDDEN = 0x10,
441     TYPEFLAG_FCONTROL = 0x20,
442     TYPEFLAG_FDUAL = 0x40,
443     TYPEFLAG_FNONEXTENSIBLE = 0x80,
444     TYPEFLAG_FOLEAUTOMATION = 0x100,
445     TYPEFLAG_FRESTRICTED = 0x200,
446     TYPEFLAG_FAGGREGATABLE = 0x400,
447     TYPEFLAG_FREPLACEABLE = 0x800,
448     TYPEFLAG_FDISPATCHABLE = 0x1000,
449     TYPEFLAG_FREVERSEBIND = 0x2000,
450     TYPEFLAG_FPROXY = 0x4000,
451 }}
452 ENUM!{enum FUNCFLAGS {
453     FUNCFLAG_FRESTRICTED = 0x1,
454     FUNCFLAG_FSOURCE = 0x2,
455     FUNCFLAG_FBINDABLE = 0x4,
456     FUNCFLAG_FREQUESTEDIT = 0x8,
457     FUNCFLAG_FDISPLAYBIND = 0x10,
458     FUNCFLAG_FDEFAULTBIND = 0x20,
459     FUNCFLAG_FHIDDEN = 0x40,
460     FUNCFLAG_FUSESGETLASTERROR = 0x80,
461     FUNCFLAG_FDEFAULTCOLLELEM = 0x100,
462     FUNCFLAG_FUIDEFAULT = 0x200,
463     FUNCFLAG_FNONBROWSABLE = 0x400,
464     FUNCFLAG_FREPLACEABLE = 0x800,
465     FUNCFLAG_FIMMEDIATEBIND = 0x1000,
466 }}
467 ENUM!{enum VARFLAGS {
468     VARFLAG_FREADONLY = 0x1,
469     VARFLAG_FSOURCE = 0x2,
470     VARFLAG_FBINDABLE = 0x4,
471     VARFLAG_FREQUESTEDIT = 0x8,
472     VARFLAG_FDISPLAYBIND = 0x10,
473     VARFLAG_FDEFAULTBIND = 0x20,
474     VARFLAG_FHIDDEN = 0x40,
475     VARFLAG_FRESTRICTED = 0x80,
476     VARFLAG_FDEFAULTCOLLELEM = 0x100,
477     VARFLAG_FUIDEFAULT = 0x200,
478     VARFLAG_FNONBROWSABLE = 0x400,
479     VARFLAG_FREPLACEABLE = 0x800,
480     VARFLAG_FIMMEDIATEBIND = 0x1000,
481 }}
482 STRUCT!{struct CLEANLOCALSTORAGE {
483     pInterface: *mut IUnknown,
484     pStorage: PVOID,
485     flags: DWORD,
486 }}
487 STRUCT!{struct CUSTDATAITEM {
488     guid: GUID,
489     varValue: VARIANTARG,
490 }}
491 pub type LPCUSTDATAITEM = *mut CUSTDATAITEM;
492 STRUCT!{struct CUSTDATA {
493     cCustData: DWORD,
494     prgCustData: LPCUSTDATAITEM,
495 }}
496 pub type LPCUSTDATA = *mut CUSTDATA;
497 pub type LPCREATETYPEINFO = *mut ICreateTypeInfo;
498 RIDL!{#[uuid(0x00020405, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
499 interface ICreateTypeInfo(ICreateTypeInfoVtbl): IUnknown(IUnknownVtbl) {
500     fn SetGuid(
501         guid: REFGUID,
502     ) -> HRESULT,
503     fn SetTypeFlags(
504         uTypeFlags: UINT,
505     ) -> HRESULT,
506     fn SetDocString(
507         pStrDoc: LPOLESTR,
508     ) -> HRESULT,
509     fn SetHelpContext(
510         dwHelpContext: DWORD,
511     ) -> HRESULT,
512     fn SetVersion(
513         wMajorVerNum: WORD,
514         wMinorVerNum: WORD,
515     ) -> HRESULT,
516     fn AddRefTypeInfo(
517         pTInfo: *mut ITypeInfo,
518     ) -> HRESULT,
519     fn AddFuncDesc(
520         index: UINT,
521         pFuncDesc: *mut FUNCDESC,
522     ) -> HRESULT,
523     fn SetImplTypeFlags(
524         index: UINT,
525         implTypeFlags: INT,
526     ) -> HRESULT,
527     fn SetAlignment(
528         cbAlignment: WORD,
529     ) -> HRESULT,
530     fn SetSchema(
531         pStrSchema: LPOLESTR,
532     ) -> HRESULT,
533     fn AddVarDesc(
534         index: UINT,
535         pVarDesc: *mut VARDESC,
536     ) -> HRESULT,
537     fn SetFuncAndParamNames(
538         index: UINT,
539         rgszNames: *mut LPOLESTR,
540         cNames: UINT,
541     ) -> HRESULT,
542     fn SetVarName(
543         index: UINT,
544         szName: LPOLESTR,
545     ) -> HRESULT,
546     fn SetTypeDescAlias(
547         pTDescAlias: *mut TYPEDESC,
548     ) -> HRESULT,
549     fn DefineFuncAsDllEntry(
550         index: UINT,
551         szDllName: LPOLESTR,
552         szProcName: LPOLESTR,
553     ) -> HRESULT,
554     fn SetFuncDocString(
555         index: UINT,
556         szDocString: LPOLESTR,
557     ) -> HRESULT,
558     fn SetVarDocString(
559         index: UINT,
560         szDocString: LPOLESTR,
561     ) -> HRESULT,
562     fn SetFuncHelpContext(
563         index: UINT,
564         dwHelpContext: DWORD,
565     ) -> HRESULT,
566     fn SetVarHelpContext(
567         index: UINT,
568         dwHelpContext: DWORD,
569     ) -> HRESULT,
570     fn SetMops(
571         index: UINT,
572         bstrMops: BSTR,
573     ) -> HRESULT,
574     fn SetTypeIdldesc(
575         pIdlDesc: *mut IDLDESC,
576     ) -> HRESULT,
577     fn LayOut() -> HRESULT,
578 }}
579 // LPCREATETYPEINFO2
580 // ICreateTypeInfo2
581 // LPCREATETYPELIB
582 // ICreateTypeLib
583 // LPCREATETYPELIB2
584 // ICreateTypeLib2
585 pub type LPDISPATCH = *mut IDispatch;
586 pub const DISPID_UNKNOWN: INT = -1;
587 pub const DISPID_VALUE: INT = 0;
588 pub const DISPID_PROPERTYPUT: INT = -3;
589 pub const DISPID_NEWENUM: INT = -4;
590 pub const DISPID_EVALUATE: INT = -5;
591 pub const DISPID_CONSTRUCTOR: INT = -6;
592 pub const DISPID_DESTRUCTOR: INT = -7;
593 pub const DISPID_COLLECT: INT = -8;
594 RIDL!{#[uuid(0x00020400, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
595 interface IDispatch(IDispatchVtbl): IUnknown(IUnknownVtbl) {
596     fn GetTypeInfoCount(
597         pctinfo: *mut UINT,
598     ) -> HRESULT,
599     fn GetTypeInfo(
600         iTInfo: UINT,
601         lcid: LCID,
602         ppTInfo: *mut *mut ITypeInfo,
603     ) -> HRESULT,
604     fn GetIDsOfNames(
605         riid: REFIID,
606         rgszNames: *mut LPOLESTR,
607         cNames: UINT,
608         lcid: LCID,
609         rgDispId: *mut DISPID,
610     ) -> HRESULT,
611     fn Invoke(
612         dispIdMember: DISPID,
613         riid: REFIID,
614         lcid: LCID,
615         wFlags: WORD,
616         pDispParams: *mut DISPPARAMS,
617         pVarResult: *mut VARIANT,
618         pExcepInfo: *mut EXCEPINFO,
619         puArgErr: *mut UINT,
620     ) -> HRESULT,
621 }}
622 // IDispatch_RemoteInvoke_Proxy
623 // IDispatch_RemoteInvoke_Stub
624 // LPENUMVARIANT
625 // IEnumVARIANT
626 // IEnumVARIANT_RemoteNext_Proxy
627 // IEnumVARIANT_RemoteNext_Stub
628 RIDL!{#[uuid(0x0000002F, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
629 interface IRecordInfo(IRecordInfoVtbl): IUnknown(IUnknownVtbl) {
630     fn RecordInit(
631         pvNew: PVOID,
632     ) -> HRESULT,
633     fn RecordClear(
634         pvExisting: PVOID,
635     ) -> HRESULT,
636     fn RecordCopy(
637         pvExisting: PVOID,
638         pvNew: PVOID,
639     ) -> HRESULT,
640     fn GetGuid(
641         pguid: *mut GUID,
642     ) -> HRESULT,
643     fn GetName(
644         pbstrName: *mut BSTR,
645     ) -> HRESULT,
646     fn GetSize(
647         pcbSize: *mut ULONG,
648     ) -> HRESULT,
649     fn GetTypeInfo(
650         ppTypeInfo: *mut *mut ITypeInfo,
651     ) -> HRESULT,
652     fn GetField(
653         pvData: PVOID,
654         szFieldName: LPCOLESTR,
655         pvarField: *mut VARIANT,
656     ) -> HRESULT,
657     fn GetFieldNoCopy(
658         pvData: PVOID,
659         szFieldName: LPCOLESTR,
660         pvarField: *mut VARIANT,
661         ppvDataCArray: *mut PVOID,
662     ) -> HRESULT,
663     fn PutField(
664         wFlags: ULONG,
665         pvData: PVOID,
666         szFieldName: LPCOLESTR,
667         pvarField: *mut VARIANT,
668     ) -> HRESULT,
669     fn PutFieldNoCopy(
670         wFlags: ULONG,
671         pvData: PVOID,
672         szFieldName: LPCOLESTR,
673         pvarField: *mut VARIANT,
674     ) -> HRESULT,
675     fn GetFieldNames(
676         pcNames: *mut ULONG,
677         rgBstrNames: *mut BSTR,
678     ) -> HRESULT,
679     fn IsMatchingType(
680         pRecordInfo: *mut IRecordInfo,
681     ) -> BOOL,
682     fn RecordCreate() -> PVOID,
683     fn RecordCreateCopy(
684         pvSource: PVOID,
685         ppvDest: *mut PVOID,
686     ) -> HRESULT,
687     fn RecordDestroy(
688         pvRecord: PVOID,
689     ) -> HRESULT,
690 }}
691 pub type LPTYPECOMP = *mut ITypeComp;
692 ENUM!{enum DESCKIND {
693     DESCKIND_NONE = 0,
694     DESCKIND_FUNCDESC = DESCKIND_NONE + 1,
695     DESCKIND_VARDESC = DESCKIND_FUNCDESC + 1,
696     DESCKIND_TYPECOMP = DESCKIND_VARDESC + 1,
697     DESCKIND_IMPLICITAPPOBJ = DESCKIND_TYPECOMP + 1,
698     DESCKIND_MAX = DESCKIND_IMPLICITAPPOBJ + 1,
699 }}
700 UNION!{union BINDPTR {
701     [usize; 1],
702     lpfuncdesc lpfuncdesc_mut: *mut FUNCDESC,
703     lpvardesc lpvardesc_mut: *mut VARDESC,
704     lptcomp lptcomp_mut: *mut ITypeComp,
705 }}
706 pub type LPBINDPTR = *mut BINDPTR;
707 RIDL!{#[uuid(0x00020403, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
708 interface ITypeComp(ITypeCompVtbl): IUnknown(IUnknownVtbl) {
709     fn Bind(
710         szName: LPOLESTR,
711         lHashVal: ULONG,
712         wFlags: WORD,
713         ppTInfo: *mut *mut ITypeInfo,
714         pDescKind: *mut DESCKIND,
715         pBindPtr: *mut BINDPTR,
716     ) -> HRESULT,
717     fn BindType(
718         szName: LPOLESTR,
719         lHashVal: ULONG,
720         ppTInfo: *mut *mut ITypeInfo,
721         ppTComp: *mut *mut ITypeComp,
722     ) -> HRESULT,
723 }}
724 ENUM!{enum SYSKIND {
725     SYS_WIN16 = 0,
726     SYS_WIN32,
727     SYS_MAC,
728     SYS_WIN64,
729 }}
730 STRUCT!{struct TLIBATTR {
731     guid: GUID,
732     lcid: LCID,
733     syskind: SYSKIND,
734     wMajorVerNum: WORD,
735     wMinorVerNum: WORD,
736     wLibFlags: WORD,
737 }}
738 RIDL!{#[uuid(0x00020402, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
739 interface ITypeLib(ITypeLibVtbl): IUnknown(IUnknownVtbl) {
740     fn GetTypeInfoCount() -> UINT,
741     fn GetTypeInfo(
742         index: UINT,
743         ppTInfo: *mut *mut ITypeInfo,
744     ) -> HRESULT,
745     fn GetTypeInfoType(
746         index: UINT,
747         pTKind: *mut TYPEKIND,
748     ) -> HRESULT,
749     fn GetTypeInfoOfGuid(
750         guid: REFGUID,
751         ppTInfo: *mut *mut ITypeInfo,
752     ) -> HRESULT,
753     fn GetLibAttr(
754         ppTLibAttr: *mut *mut TLIBATTR,
755     ) -> HRESULT,
756     fn GetTypeComp(
757         ppTComp: *mut *mut ITypeComp,
758     ) -> HRESULT,
759     fn GetDocumentation(
760         index: INT,
761         pbstrName: *mut BSTR,
762         pBstrDocString: *mut BSTR,
763         pdwHelpContext: *mut DWORD,
764         pBstrHelpFile: *mut BSTR,
765     ) -> HRESULT,
766     fn IsName(
767         szNameBuf: LPOLESTR,
768         lHashVal: ULONG,
769         pfName: *mut BOOL,
770     ) -> HRESULT,
771     fn FindName(
772         szNameBuf: LPOLESTR,
773         lHashVal: ULONG,
774         ppTInfo: *mut *mut ITypeInfo,
775         rgMemId: *mut MEMBERID,
776         pcFound: *mut USHORT,
777     ) -> HRESULT,
778     fn ReleaseTLibAttr(
779         pTLibAttr: *const TLIBATTR,
780     ) -> HRESULT,
781 }}
782 RIDL!{#[uuid(0x00020401, 0x0000, 0x0000, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46)]
783 interface ITypeInfo(ITypeInfoVtbl): IUnknown(IUnknownVtbl) {
784     fn GetTypeAttr(
785         ppTypeAttr: *mut *mut TYPEATTR,
786     ) -> HRESULT,
787     fn GetTypeComp(
788         ppTComp: *mut *mut ITypeComp,
789     ) -> HRESULT,
790     fn GetFuncDesc(
791         index: UINT,
792         ppFunDesc: *mut *mut FUNCDESC,
793     ) -> HRESULT,
794     fn GetVarDesc(
795         index: UINT,
796         pPVarDesc: *mut *mut VARDESC,
797     ) -> HRESULT,
798     fn GetNames(
799         memid: MEMBERID,
800         rgBstrNames: *mut BSTR,
801         cMaxNames: UINT,
802         pcNames: *mut UINT,
803     ) -> HRESULT,
804     fn GetRefTypeOfImplType(
805         index: UINT,
806         pRefType: *mut HREFTYPE,
807     ) -> HRESULT,
808     fn GetImplTypeFlags(
809         index: UINT,
810         pImplTypeFlags: *mut INT,
811     ) -> HRESULT,
812     fn GetIDsOfNames(
813         rgszNames: *mut LPOLESTR,
814         cNames: UINT,
815         pMemId: *mut MEMBERID,
816     ) -> HRESULT,
817     fn Invoke(
818         pvInstance: PVOID,
819         memid: MEMBERID,
820         wFlags: WORD,
821         pDispParams: *mut DISPPARAMS,
822         pVarResult: *mut VARIANT,
823         pExcepInfo: *mut EXCEPINFO,
824         puArgErr: *mut UINT,
825     ) -> HRESULT,
826     fn GetDocumentation(
827         memid: MEMBERID,
828         pBstrName: *mut BSTR,
829         pBstrDocString: *mut BSTR,
830         pdwHelpContext: *mut DWORD,
831         pBstrHelpFile: *mut BSTR,
832     ) -> HRESULT,
833     fn GetDllEntry(
834         memid: MEMBERID,
835         invKind: INVOKEKIND,
836         pBstrDllName: *mut BSTR,
837         pBstrName: *mut BSTR,
838         pwOrdinal: *mut WORD,
839     ) -> HRESULT,
840     fn GetRefTypeInfo(
841         hRefType: HREFTYPE,
842         ppTInfo: *mut *mut ITypeInfo,
843     ) -> HRESULT,
844     fn AddressOfMember(
845         memid: MEMBERID,
846         invKind: INVOKEKIND,
847         ppv: *mut PVOID,
848     ) -> HRESULT,
849     fn CreateInstance(
850         pUnkOuter: *mut IUnknown,
851         riid: REFIID,
852         ppvObj: *mut PVOID,
853     ) -> HRESULT,
854     fn GetMops(
855         memid: MEMBERID,
856         pBstrMops: *mut BSTR,
857     ) -> HRESULT,
858     fn GetContainingTypeLib(
859         ppTLib: *mut *mut ITypeLib,
860         pIndex: *mut UINT,
861     ) -> HRESULT,
862     fn ReleaseTypeAttr(
863         pTypeAttr: *mut TYPEATTR,
864     ) -> (),
865     fn ReleaseFuncDesc(
866         pFuncDesc: *mut FUNCDESC,
867     ) -> (),
868     fn ReleaseVarDesc(
869         pVarDesc: *mut VARDESC,
870     ) -> (),
871 }}
872 RIDL!{#[uuid(0x3127ca40, 0x446e, 0x11ce, 0x81, 0x35, 0x00, 0xaa, 0x00, 0x4b, 0xb8, 0x51)]
873 interface IErrorLog(IErrorLogVtbl): IUnknown(IUnknownVtbl) {
874     fn AddError(
875         pszPropName: LPCOLESTR,
876         pExcepInfo: *const EXCEPINFO,
877     ) -> HRESULT,
878 }}
879 pub type LPERRORLOG = *mut IErrorLog;
880