1 // Copyright © 2017 winapi-rs developers
2 // Licensed under the Apache License, Version 2.0
3 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
4 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
5 // All files in the project carrying such notice may not be copied, modified, or distributed
6 // except according to those terms.
7 //! Mappings for the contents of OleAuto.h
8 use ctypes::{c_double, c_float, c_int, c_uint, c_void};
9 use shared::basetsd::{LONG64, ULONG64};
10 use shared::minwindef::{BYTE, DWORD, FLOAT, UINT, ULONG, USHORT, WORD};
11 use shared::wtypes::{BSTR, DATE, DECIMAL, LPBSTR, LPDECIMAL, VARTYPE};
12 use shared::wtypesbase::{DOUBLE, LPCOLESTR, LPOLESTR, OLECHAR};
13 use um::minwinbase::LPSYSTEMTIME;
14 use um::oaidl::{DISPID_UNKNOWN, ITypeLib, VARIANT, VARIANTARG};
15 use um::winnt::{CHAR, HRESULT, INT, LCID, LONG, LPCSTR, SHORT};
16 extern "system" {
SysAllocString( psz: *const OLECHAR, ) -> BSTR17     pub fn SysAllocString(
18         psz: *const OLECHAR,
19     ) -> BSTR;
SysReAllocString( pbstr: *mut BSTR, psz: *const OLECHAR, ) -> INT20     pub fn SysReAllocString(
21         pbstr: *mut BSTR,
22         psz: *const OLECHAR,
23     ) -> INT;
SysAllocStringLen( strIn: *const OLECHAR, ui: UINT, ) -> BSTR24     pub fn SysAllocStringLen(
25         strIn: *const OLECHAR,
26         ui: UINT,
27     ) -> BSTR;
SysReAllocStringLen( pbstr: *mut BSTR, psz: *const OLECHAR, len: c_uint, ) -> INT28     pub fn SysReAllocStringLen(
29         pbstr: *mut BSTR,
30         psz: *const OLECHAR,
31         len: c_uint,
32     ) -> INT;
SysFreeString( bstrString: BSTR, )33     pub fn SysFreeString(
34         bstrString: BSTR,
35     );
SysStringLen( pbstr: BSTR, ) -> UINT36     pub fn SysStringLen(
37         pbstr: BSTR,
38     ) -> UINT;
SysStringByteLen( bstr: BSTR, ) -> UINT39     pub fn SysStringByteLen(
40         bstr: BSTR,
41     ) -> UINT;
SysAllocStringByteLen( psz: LPCSTR, len: UINT, ) -> BSTR42     pub fn SysAllocStringByteLen(
43         psz: LPCSTR,
44         len: UINT,
45     ) -> BSTR;
DosDateTimeToVariantTime( wDosDate: USHORT, wDosTime: USHORT, pvtime: *mut DOUBLE, ) -> INT46     pub fn DosDateTimeToVariantTime(
47         wDosDate: USHORT,
48         wDosTime: USHORT,
49         pvtime: *mut DOUBLE,
50     ) -> INT;
VariantTimeToDosDateTime( vtime: DOUBLE, pwDosDate: *mut USHORT, pwDosTime: *mut USHORT, ) -> INT51     pub fn VariantTimeToDosDateTime(
52         vtime: DOUBLE,
53         pwDosDate: *mut USHORT,
54         pwDosTime: *mut USHORT,
55     ) -> INT;
SystemTimeToVariantTime( lpSystemTime: LPSYSTEMTIME, pvtime: *mut DOUBLE, ) -> INT56     pub fn SystemTimeToVariantTime(
57         lpSystemTime: LPSYSTEMTIME,
58         pvtime: *mut DOUBLE,
59     ) -> INT;
VariantTimeToSystemTime( vtime: DOUBLE, lpSystemTime: LPSYSTEMTIME, ) -> INT60     pub fn VariantTimeToSystemTime(
61         vtime: DOUBLE,
62         lpSystemTime: LPSYSTEMTIME,
63     ) -> INT;
VariantInit( pvarg: *mut VARIANTARG, )64     pub fn VariantInit(
65         pvarg: *mut VARIANTARG,
66     );
VariantClear( pvarg: *mut VARIANTARG, ) -> HRESULT67     pub fn VariantClear(
68         pvarg: *mut VARIANTARG,
69     ) -> HRESULT;
VariantCopy( pvargDest: *mut VARIANTARG, pvargSrc: *const VARIANTARG, ) -> HRESULT70     pub fn VariantCopy(
71         pvargDest: *mut VARIANTARG,
72         pvargSrc: *const VARIANTARG,
73     ) -> HRESULT;
VariantCopyInd( pvarDest: *mut VARIANT, pvargSrc: *const VARIANTARG, ) -> HRESULT74     pub fn VariantCopyInd(
75         pvarDest: *mut VARIANT,
76         pvargSrc: *const VARIANTARG,
77     ) -> HRESULT;
VariantChangeType( pvargDest: *mut VARIANTARG, pvarSrc: *const VARIANTARG, wFlags: USHORT, vt: VARTYPE, ) -> HRESULT78     pub fn VariantChangeType(
79         pvargDest: *mut VARIANTARG,
80         pvarSrc: *const VARIANTARG,
81         wFlags: USHORT,
82         vt: VARTYPE,
83     ) -> HRESULT;
VariantChangeTypeEx( pvargDest: *mut VARIANTARG, pvarSrc: *const VARIANTARG, lcid: LCID, wFlags: USHORT, vt: VARTYPE, ) -> HRESULT84     pub fn VariantChangeTypeEx(
85         pvargDest: *mut VARIANTARG,
86         pvarSrc: *const VARIANTARG,
87         lcid: LCID,
88         wFlags: USHORT,
89         vt: VARTYPE,
90     ) -> HRESULT;
VarUI1FromI2( sIn: SHORT, pbOut: *mut BYTE, )91     pub fn VarUI1FromI2(
92         sIn: SHORT,
93         pbOut: *mut BYTE,
94     );
VarUI1FromI4( lIn: LONG, pbOut: *mut BYTE, )95     pub fn VarUI1FromI4(
96         lIn: LONG,
97         pbOut: *mut BYTE,
98     );
VarUI1FromI8( i64In: LONG64, pbOut: *mut BYTE, )99     pub fn VarUI1FromI8(
100         i64In: LONG64,
101         pbOut: *mut BYTE,
102     );
VarUI1FromR4( fltIn: FLOAT, pbOut: *mut BYTE, )103     pub fn VarUI1FromR4(
104         fltIn: FLOAT,
105         pbOut: *mut BYTE,
106     );
VarUI1FromR8( dblIn: DOUBLE, pbOut: *mut BYTE, )107     pub fn VarUI1FromR8(
108         dblIn: DOUBLE,
109         pbOut: *mut BYTE,
110     );
VarUI1FromDate( dateIn: DATE, pbOut: *mut BYTE, )111     pub fn VarUI1FromDate(
112         dateIn: DATE,
113         pbOut: *mut BYTE,
114     );
VarUI1FromStr( strIn: LPCOLESTR, lcid: LCID, dwFlags: ULONG, pbOut: *mut BYTE, )115     pub fn VarUI1FromStr(
116         strIn: LPCOLESTR,
117         lcid: LCID,
118         dwFlags: ULONG,
119         pbOut: *mut BYTE,
120     );
VarUI1FromI1( cIn: CHAR, pbOut: *mut BYTE, )121     pub fn VarUI1FromI1(
122         cIn: CHAR,
123         pbOut: *mut BYTE,
124     );
VarUI1FromUI2( uiIn: USHORT, pbOut: *mut BYTE, )125     pub fn VarUI1FromUI2(
126         uiIn: USHORT,
127         pbOut: *mut BYTE,
128     );
VarUI1FromUI4( ulIn: ULONG, pbOut: *mut BYTE, )129     pub fn VarUI1FromUI4(
130         ulIn: ULONG,
131         pbOut: *mut BYTE,
132     );
VarUI1FromUI8( ui64In: ULONG64, pbOut: *mut BYTE, )133     pub fn VarUI1FromUI8(
134         ui64In: ULONG64,
135         pbOut: *mut BYTE,
136     );
VarUI1FromDec( pdecIn: *const DECIMAL, pbOut: *mut BYTE, )137     pub fn VarUI1FromDec(
138         pdecIn: *const DECIMAL,
139         pbOut: *mut BYTE,
140     );
VarI2FromUI1( bIn: BYTE, psOut: *mut SHORT, )141     pub fn VarI2FromUI1(
142         bIn: BYTE,
143         psOut: *mut SHORT,
144     );
VarI2FromI4( lIn: LONG, psOut: *mut SHORT, )145     pub fn VarI2FromI4(
146         lIn: LONG,
147         psOut: *mut SHORT,
148     );
VarI2FromI8( i64In: LONG64, psOut: *mut SHORT, )149     pub fn VarI2FromI8(
150         i64In: LONG64,
151         psOut: *mut SHORT,
152     );
VarI2FromR4( fltIn: FLOAT, psOut: *mut SHORT, )153     pub fn VarI2FromR4(
154         fltIn: FLOAT,
155         psOut: *mut SHORT,
156     );
VarI2FromR8( dblIn: DOUBLE, psOut: *mut SHORT, )157     pub fn VarI2FromR8(
158         dblIn: DOUBLE,
159         psOut: *mut SHORT,
160     );
VarI2FromDate( dateIn: DATE, psOut: *mut SHORT, )161     pub fn VarI2FromDate(
162         dateIn: DATE,
163         psOut: *mut SHORT,
164     );
VarI2FromStr( strIn: LPCOLESTR, lcid: LCID, dwFlags: ULONG, psOut: *mut SHORT, )165     pub fn VarI2FromStr(
166         strIn: LPCOLESTR,
167         lcid: LCID,
168         dwFlags: ULONG,
169         psOut: *mut SHORT,
170     );
VarI2FromI1( cIn: CHAR, psOut: *mut SHORT, )171     pub fn VarI2FromI1(
172         cIn: CHAR,
173         psOut: *mut SHORT,
174     );
VarI2FromUI2( uiIn: USHORT, psOut: *mut SHORT, )175     pub fn VarI2FromUI2(
176         uiIn: USHORT,
177         psOut: *mut SHORT,
178     );
VarI2FromUI4( ulIn: ULONG, psOut: *mut SHORT, )179     pub fn VarI2FromUI4(
180         ulIn: ULONG,
181         psOut: *mut SHORT,
182     );
VarI2FromUI8( ui64In: ULONG64, psOut: *mut SHORT, )183     pub fn VarI2FromUI8(
184         ui64In: ULONG64,
185         psOut: *mut SHORT,
186     );
VarI2FromDec( pdecIn: *const DECIMAL, psOut: *mut SHORT, )187     pub fn VarI2FromDec(
188         pdecIn: *const DECIMAL,
189         psOut: *mut SHORT,
190     );
VarI4FromUI1( bIn: BYTE, plOut: *mut LONG, )191     pub fn VarI4FromUI1(
192         bIn: BYTE,
193         plOut: *mut LONG,
194     );
VarI4FromI2( sIn: SHORT, plOut: *mut LONG, )195     pub fn VarI4FromI2(
196         sIn: SHORT,
197         plOut: *mut LONG,
198     );
VarI4FromI8( i64In: LONG64, plOut: *mut LONG, )199     pub fn VarI4FromI8(
200         i64In: LONG64,
201         plOut: *mut LONG,
202     );
VarI4FromR4( fltIn: FLOAT, plOut: *mut LONG, )203     pub fn VarI4FromR4(
204         fltIn: FLOAT,
205         plOut: *mut LONG,
206     );
VarI4FromR8( dblIn: DOUBLE, plOut: *mut LONG, )207     pub fn VarI4FromR8(
208         dblIn: DOUBLE,
209         plOut: *mut LONG,
210     );
VarI4FromDate( dateIn: DATE, plOut: *mut LONG, )211     pub fn VarI4FromDate(
212         dateIn: DATE,
213         plOut: *mut LONG,
214     );
VarI4FromStr( strIn: LPCOLESTR, lcid: LCID, dwFlags: ULONG, plOut: *mut LONG, )215     pub fn VarI4FromStr(
216         strIn: LPCOLESTR,
217         lcid: LCID,
218         dwFlags: ULONG,
219         plOut: *mut LONG,
220     );
VarI4FromI1( cIn: CHAR, plOut: *mut LONG, )221     pub fn VarI4FromI1(
222         cIn: CHAR,
223         plOut: *mut LONG,
224     );
VarI4FromUI2( uiIn: USHORT, plOut: *mut LONG, )225     pub fn VarI4FromUI2(
226         uiIn: USHORT,
227         plOut: *mut LONG,
228     );
VarI4FromUI4( ulIn: ULONG, plOut: *mut LONG, )229     pub fn VarI4FromUI4(
230         ulIn: ULONG,
231         plOut: *mut LONG,
232     );
VarI4FromUI8( ui64In: ULONG64, plOut: *mut LONG, )233     pub fn VarI4FromUI8(
234         ui64In: ULONG64,
235         plOut: *mut LONG,
236     );
VarI4FromDec( pdecIn: *const DECIMAL, plOut: *mut LONG, )237     pub fn VarI4FromDec(
238         pdecIn: *const DECIMAL,
239         plOut: *mut LONG,
240     );
VarI8FromUI1( bIn: BYTE, pi64Out: *mut LONG64, )241     pub fn VarI8FromUI1(
242         bIn: BYTE,
243         pi64Out: *mut LONG64,
244     );
VarI8FromI2( sIn: SHORT, pi64Out: *mut LONG64, )245     pub fn VarI8FromI2(
246         sIn: SHORT,
247         pi64Out: *mut LONG64,
248     );
VarI8FromR4( fltIn: FLOAT, pi64Out: *mut LONG64, )249     pub fn VarI8FromR4(
250         fltIn: FLOAT,
251         pi64Out: *mut LONG64,
252     );
VarI8FromR8( dblIn: DOUBLE, pi64Out: *mut LONG64, )253     pub fn VarI8FromR8(
254         dblIn: DOUBLE,
255         pi64Out: *mut LONG64,
256     );
VarI8FromDate( dateIn: DATE, pi64Out: *mut LONG64, )257     pub fn VarI8FromDate(
258         dateIn: DATE,
259         pi64Out: *mut LONG64,
260     );
VarI8FromStr( strIn: LPCOLESTR, lcid: LCID, dwFlags: ULONG, pi64Out: *mut LONG64, )261     pub fn VarI8FromStr(
262         strIn: LPCOLESTR,
263         lcid: LCID,
264         dwFlags: ULONG,
265         pi64Out: *mut LONG64,
266     );
VarI8FromI1( cIn: CHAR, pi64Out: *mut LONG64, )267     pub fn VarI8FromI1(
268         cIn: CHAR,
269         pi64Out: *mut LONG64,
270     );
VarI8FromUI2( uiIn: USHORT, pi64Out: *mut LONG64, )271     pub fn VarI8FromUI2(
272         uiIn: USHORT,
273         pi64Out: *mut LONG64,
274     );
VarI8FromUI4( ulIn: ULONG, pi64Out: *mut LONG64, )275     pub fn VarI8FromUI4(
276         ulIn: ULONG,
277         pi64Out: *mut LONG64,
278     );
VarI8FromUI8( ui64In: ULONG64, pi64Out: *mut LONG64, )279     pub fn VarI8FromUI8(
280         ui64In: ULONG64,
281         pi64Out: *mut LONG64,
282     );
VarI8FromDec( pdecIn: *const DECIMAL, pi64Out: *mut LONG64, )283     pub fn VarI8FromDec(
284         pdecIn: *const DECIMAL,
285         pi64Out: *mut LONG64,
286     );
VarR4FromUI1( bIn: BYTE, pfltOut: *mut FLOAT, )287     pub fn VarR4FromUI1(
288         bIn: BYTE,
289         pfltOut: *mut FLOAT,
290     );
VarR4FromI2( sIn: SHORT, pfltOut: *mut FLOAT, )291     pub fn VarR4FromI2(
292         sIn: SHORT,
293         pfltOut: *mut FLOAT,
294     );
VarR4FromI4( lIn: LONG, pfltOut: *mut FLOAT, )295     pub fn VarR4FromI4(
296         lIn: LONG,
297         pfltOut: *mut FLOAT,
298     );
VarR4FromI8( i64In: LONG64, pfltOut: *mut FLOAT, )299     pub fn VarR4FromI8(
300         i64In: LONG64,
301         pfltOut: *mut FLOAT,
302     );
VarR4FromR8( dblIn: DOUBLE, pfltOut: *mut FLOAT, )303     pub fn VarR4FromR8(
304         dblIn: DOUBLE,
305         pfltOut: *mut FLOAT,
306     );
VarR4FromDate( dateIn: DATE, pfltOut: *mut FLOAT, )307     pub fn VarR4FromDate(
308         dateIn: DATE,
309         pfltOut: *mut FLOAT,
310     );
VarR4FromStr( strIn: LPCOLESTR, lcid: LCID, dwFlags: ULONG, pfltOut: *mut FLOAT, )311     pub fn VarR4FromStr(
312         strIn: LPCOLESTR,
313         lcid: LCID,
314         dwFlags: ULONG,
315         pfltOut: *mut FLOAT,
316     );
VarR4FromI1( cIn: CHAR, pfltOut: *mut FLOAT, )317     pub fn VarR4FromI1(
318         cIn: CHAR,
319         pfltOut: *mut FLOAT,
320     );
VarR4FromUI2( uiIn: USHORT, pfltOut: *mut FLOAT, )321     pub fn VarR4FromUI2(
322         uiIn: USHORT,
323         pfltOut: *mut FLOAT,
324     );
VarR4FromUI4( ulIn: ULONG, pfltOut: *mut FLOAT, )325     pub fn VarR4FromUI4(
326         ulIn: ULONG,
327         pfltOut: *mut FLOAT,
328     );
VarR4FromUI8( ui64In: ULONG64, pfltOut: *mut FLOAT, )329     pub fn VarR4FromUI8(
330         ui64In: ULONG64,
331         pfltOut: *mut FLOAT,
332     );
VarR4FromDec( pdecIn: *const DECIMAL, pfltOut: *mut FLOAT, )333     pub fn VarR4FromDec(
334         pdecIn: *const DECIMAL,
335         pfltOut: *mut FLOAT,
336     );
VarR8FromUI1( bIn: BYTE, pdblOut: *mut DOUBLE, )337     pub fn VarR8FromUI1(
338         bIn: BYTE,
339         pdblOut: *mut DOUBLE,
340     );
VarR8FromI2( sIn: SHORT, pdblOut: *mut DOUBLE, )341     pub fn VarR8FromI2(
342         sIn: SHORT,
343         pdblOut: *mut DOUBLE,
344     );
VarR8FromI4( lIn: LONG, pdblOut: *mut DOUBLE, )345     pub fn VarR8FromI4(
346         lIn: LONG,
347         pdblOut: *mut DOUBLE,
348     );
VarR8FromI8( i64In: LONG64, pdblOut: *mut DOUBLE, )349     pub fn VarR8FromI8(
350         i64In: LONG64,
351         pdblOut: *mut DOUBLE,
352     );
VarR8FromR4( fltIn: FLOAT, pdblOut: *mut DOUBLE, )353     pub fn VarR8FromR4(
354         fltIn: FLOAT,
355         pdblOut: *mut DOUBLE,
356     );
VarR8FromDate( dateIn: DATE, pdblOut: *mut DOUBLE, )357     pub fn VarR8FromDate(
358         dateIn: DATE,
359         pdblOut: *mut DOUBLE,
360     );
VarR8FromStr( strIn: LPCOLESTR, lcid: LCID, dwFlags: ULONG, pdblOut: *mut DOUBLE, )361     pub fn VarR8FromStr(
362         strIn: LPCOLESTR,
363         lcid: LCID,
364         dwFlags: ULONG,
365         pdblOut: *mut DOUBLE,
366     );
VarR8FromI1( cIn: CHAR, pdblOut: *mut DOUBLE, )367     pub fn VarR8FromI1(
368         cIn: CHAR,
369         pdblOut: *mut DOUBLE,
370     );
VarR8FromUI2( uiIn: USHORT, pdblOut: *mut DOUBLE, )371     pub fn VarR8FromUI2(
372         uiIn: USHORT,
373         pdblOut: *mut DOUBLE,
374     );
VarR8FromUI4( ulIn: ULONG, pdblOut: *mut DOUBLE, )375     pub fn VarR8FromUI4(
376         ulIn: ULONG,
377         pdblOut: *mut DOUBLE,
378     );
VarR8FromUI8( ui64In: ULONG64, pdblOut: *mut DOUBLE, )379     pub fn VarR8FromUI8(
380         ui64In: ULONG64,
381         pdblOut: *mut DOUBLE,
382     );
VarR8FromDec( pdecIn: *const DECIMAL, pdblOut: *mut DOUBLE, )383     pub fn VarR8FromDec(
384         pdecIn: *const DECIMAL,
385         pdblOut: *mut DOUBLE,
386     );
VarDateFromUI1( bIn: BYTE, pdateOut: *mut DATE, )387     pub fn VarDateFromUI1(
388         bIn: BYTE,
389         pdateOut: *mut DATE,
390     );
VarDateFromI2( sIn: SHORT, pdateOut: *mut DATE, )391     pub fn VarDateFromI2(
392         sIn: SHORT,
393         pdateOut: *mut DATE,
394     );
VarDateFromI4( lIn: LONG, pdateOut: *mut DATE, )395     pub fn VarDateFromI4(
396         lIn: LONG,
397         pdateOut: *mut DATE,
398     );
VarDateFromI8( i64In: LONG64, pdateOut: *mut DATE, )399     pub fn VarDateFromI8(
400         i64In: LONG64,
401         pdateOut: *mut DATE,
402     );
VarDateFromR4( fltIn: FLOAT, pdateOut: *mut DATE, )403     pub fn VarDateFromR4(
404         fltIn: FLOAT,
405         pdateOut: *mut DATE,
406     );
VarDateFromR8( dblIn: DOUBLE, pdateOut: *mut DATE, )407     pub fn VarDateFromR8(
408         dblIn: DOUBLE,
409         pdateOut: *mut DATE,
410     );
VarDateFromStr( strIn: LPCOLESTR, lcid: LCID, dwFlags: ULONG, pdateOut: *mut DATE, )411     pub fn VarDateFromStr(
412         strIn: LPCOLESTR,
413         lcid: LCID,
414         dwFlags: ULONG,
415         pdateOut: *mut DATE,
416     );
VarDateFromI1( cIn: CHAR, pdateOut: *mut DATE, )417     pub fn VarDateFromI1(
418         cIn: CHAR,
419         pdateOut: *mut DATE,
420     );
VarDateFromUI2( uiIn: USHORT, pdateOut: *mut DATE, )421     pub fn VarDateFromUI2(
422         uiIn: USHORT,
423         pdateOut: *mut DATE,
424     );
VarDateFromUI4( ulIn: ULONG, pdateOut: *mut DATE, )425     pub fn VarDateFromUI4(
426         ulIn: ULONG,
427         pdateOut: *mut DATE,
428     );
VarDateFromUI8( ui64In: ULONG64, pdateOut: *mut DATE, )429     pub fn VarDateFromUI8(
430         ui64In: ULONG64,
431         pdateOut: *mut DATE,
432     );
VarDateFromDec( pdecIn: *const DECIMAL, pdateOut: *mut DATE, )433     pub fn VarDateFromDec(
434         pdecIn: *const DECIMAL,
435         pdateOut: *mut DATE,
436     );
VarBstrFromUI1( bVal: BYTE, lcid: LCID, dwFlags: ULONG, pbstrOut: *mut BSTR, )437     pub fn VarBstrFromUI1(
438         bVal: BYTE,
439         lcid: LCID,
440         dwFlags: ULONG,
441         pbstrOut: *mut BSTR,
442     );
VarBstrFromI2( iVal: SHORT, lcid: LCID, dwFlags: ULONG, pbstrOut: *mut BSTR, )443     pub fn VarBstrFromI2(
444         iVal: SHORT,
445         lcid: LCID,
446         dwFlags: ULONG,
447         pbstrOut: *mut BSTR,
448     );
VarBstrFromI4( lIn: LONG, lcid: LCID, dwFlags: ULONG, pbstrOut: *mut BSTR, )449     pub fn VarBstrFromI4(
450         lIn: LONG,
451         lcid: LCID,
452         dwFlags: ULONG,
453         pbstrOut: *mut BSTR,
454     );
VarBstrFromI8( i64In: LONG64, lcid: LCID, dwFlags: ULONG, pbstrOut: *mut BSTR, )455     pub fn VarBstrFromI8(
456         i64In: LONG64,
457         lcid: LCID,
458         dwFlags: ULONG,
459         pbstrOut: *mut BSTR,
460     );
VarBstrFromR4( fltIn: FLOAT, lcid: LCID, dwFlags: ULONG, pbstrOut: *mut BSTR, )461     pub fn VarBstrFromR4(
462         fltIn: FLOAT,
463         lcid: LCID,
464         dwFlags: ULONG,
465         pbstrOut: *mut BSTR,
466     );
VarBstrFromR8( dblIn: DOUBLE, lcid: LCID, dwFlags: ULONG, pbstrOut: *mut BSTR, )467     pub fn VarBstrFromR8(
468         dblIn: DOUBLE,
469         lcid: LCID,
470         dwFlags: ULONG,
471         pbstrOut: *mut BSTR,
472     );
VarBstrFromDate( dateIn: DATE, lcid: LCID, dwFlags: ULONG, pbstrOut: *mut BSTR, )473     pub fn VarBstrFromDate(
474         dateIn: DATE,
475         lcid: LCID,
476         dwFlags: ULONG,
477         pbstrOut: *mut BSTR,
478     );
VarBstrFromI1( cIn: CHAR, lcid: LCID, dwFlags: ULONG, pbstrOut: *mut BSTR, )479     pub fn VarBstrFromI1(
480         cIn: CHAR,
481         lcid: LCID,
482         dwFlags: ULONG,
483         pbstrOut: *mut BSTR,
484     );
VarBstrFromUI2( uiIn: USHORT, lcid: LCID, dwFlags: ULONG, pbstrOut: *mut BSTR, )485     pub fn VarBstrFromUI2(
486         uiIn: USHORT,
487         lcid: LCID,
488         dwFlags: ULONG,
489         pbstrOut: *mut BSTR,
490     );
VarBstrFromUI4( ulIn: ULONG, lcid: LCID, dwFlags: ULONG, pbstrOut: *mut BSTR, )491     pub fn VarBstrFromUI4(
492         ulIn: ULONG,
493         lcid: LCID,
494         dwFlags: ULONG,
495         pbstrOut: *mut BSTR,
496     );
VarBstrFromUI8( ui64In: ULONG64, lcid: LCID, dwFlags: ULONG, pbstrOut: *mut BSTR, )497     pub fn VarBstrFromUI8(
498         ui64In: ULONG64,
499         lcid: LCID,
500         dwFlags: ULONG,
501         pbstrOut: *mut BSTR,
502     );
VarBstrFromDec( pdecIn: *const DECIMAL, lcid: LCID, dwFlags: ULONG, pbstrOut: *mut BSTR, )503     pub fn VarBstrFromDec(
504         pdecIn: *const DECIMAL,
505         lcid: LCID,
506         dwFlags: ULONG,
507         pbstrOut: *mut BSTR,
508     );
VarUI2FromUI1( bIn: BYTE, puiOut: *mut USHORT, )509     pub fn VarUI2FromUI1(
510         bIn: BYTE,
511         puiOut: *mut USHORT,
512     );
VarUI2FromI2( uiIn: SHORT, puiOut: *mut USHORT, )513     pub fn VarUI2FromI2(
514         uiIn: SHORT,
515         puiOut: *mut USHORT,
516     );
VarUI2FromI4( lIn: LONG, puiOut: *mut USHORT, )517     pub fn VarUI2FromI4(
518         lIn: LONG,
519         puiOut: *mut USHORT,
520     );
VarUI2FromI8( i64In: LONG64, puiOut: *mut USHORT, )521     pub fn VarUI2FromI8(
522         i64In: LONG64,
523         puiOut: *mut USHORT,
524     );
VarUI2FromR4( fltIn: FLOAT, puiOut: *mut USHORT, )525     pub fn VarUI2FromR4(
526         fltIn: FLOAT,
527         puiOut: *mut USHORT,
528     );
VarUI2FromR8( dblIn: DOUBLE, puiOut: *mut USHORT, )529     pub fn VarUI2FromR8(
530         dblIn: DOUBLE,
531         puiOut: *mut USHORT,
532     );
VarUI2FromDate( dateIn: DATE, puiOut: *mut USHORT, )533     pub fn VarUI2FromDate(
534         dateIn: DATE,
535         puiOut: *mut USHORT,
536     );
VarUI2FromStr( strIn: LPCOLESTR, lcid: LCID, dwFlags: ULONG, puiOut: *mut USHORT, )537     pub fn VarUI2FromStr(
538         strIn: LPCOLESTR,
539         lcid: LCID,
540         dwFlags: ULONG,
541         puiOut: *mut USHORT,
542     );
VarUI2FromI1( cIn: CHAR, puiOut: *mut USHORT, )543     pub fn VarUI2FromI1(
544         cIn: CHAR,
545         puiOut: *mut USHORT,
546     );
VarUI2FromUI4( ulIn: ULONG, puiOut: *mut USHORT, )547     pub fn VarUI2FromUI4(
548         ulIn: ULONG,
549         puiOut: *mut USHORT,
550     );
VarUI2FromUI8( i64In: ULONG64, puiOut: *mut USHORT, )551     pub fn VarUI2FromUI8(
552         i64In: ULONG64,
553         puiOut: *mut USHORT,
554     );
VarUI2FromDec( pdecIn: *const DECIMAL, puiOut: *mut USHORT, )555     pub fn VarUI2FromDec(
556         pdecIn: *const DECIMAL,
557         puiOut: *mut USHORT,
558     );
VarUI4FromUI1( bIn: BYTE, pulOut: *mut ULONG, )559     pub fn VarUI4FromUI1(
560         bIn: BYTE,
561         pulOut: *mut ULONG,
562     );
VarUI4FromI2( uiIn: SHORT, pulOut: *mut ULONG, )563     pub fn VarUI4FromI2(
564         uiIn: SHORT,
565         pulOut: *mut ULONG,
566     );
VarUI4FromI4( lIn: LONG, pulOut: *mut ULONG, )567     pub fn VarUI4FromI4(
568         lIn: LONG,
569         pulOut: *mut ULONG,
570     );
VarUI4FromI8( i64In: LONG64, plOut: *mut ULONG, )571     pub fn VarUI4FromI8(
572         i64In: LONG64,
573         plOut: *mut ULONG,
574     );
VarUI4FromR4( fltIn: FLOAT, pulOut: *mut ULONG, )575     pub fn VarUI4FromR4(
576         fltIn: FLOAT,
577         pulOut: *mut ULONG,
578     );
VarUI4FromR8( dblIn: DOUBLE, pulOut: *mut ULONG, )579     pub fn VarUI4FromR8(
580         dblIn: DOUBLE,
581         pulOut: *mut ULONG,
582     );
VarUI4FromDate( dateIn: DATE, pulOut: *mut ULONG, )583     pub fn VarUI4FromDate(
584         dateIn: DATE,
585         pulOut: *mut ULONG,
586     );
VarUI4FromStr( strIn: LPCOLESTR, lcid: LCID, dwFlags: ULONG, pulOut: *mut ULONG, )587     pub fn VarUI4FromStr(
588         strIn: LPCOLESTR,
589         lcid: LCID,
590         dwFlags: ULONG,
591         pulOut: *mut ULONG,
592     );
VarUI4FromI1( cIn: CHAR, pulOut: *mut ULONG, )593     pub fn VarUI4FromI1(
594         cIn: CHAR,
595         pulOut: *mut ULONG,
596     );
VarUI4FromUI2( uiIn: USHORT, pulOut: *mut ULONG, )597     pub fn VarUI4FromUI2(
598         uiIn: USHORT,
599         pulOut: *mut ULONG,
600     );
VarUI4FromUI8( ui64In: ULONG64, plOut: *mut ULONG, )601     pub fn VarUI4FromUI8(
602         ui64In: ULONG64,
603         plOut: *mut ULONG,
604     );
VarUI4FromDec( pdecIn: *const DECIMAL, pulOut: *mut ULONG, )605     pub fn VarUI4FromDec(
606         pdecIn: *const DECIMAL,
607         pulOut: *mut ULONG,
608     );
VarUI8FromUI1( bIn: BYTE, pi64Out: *mut ULONG64, )609     pub fn VarUI8FromUI1(
610         bIn: BYTE,
611         pi64Out: *mut ULONG64,
612     );
VarUI8FromI2( sIn: SHORT, pi64Out: *mut ULONG64, )613     pub fn VarUI8FromI2(
614         sIn: SHORT,
615         pi64Out: *mut ULONG64,
616     );
VarUI8FromI4( lIn: LONG, pi64Out: *mut ULONG64, )617     pub fn VarUI8FromI4(
618         lIn: LONG,
619         pi64Out: *mut ULONG64,
620     );
VarUI8FromI8( ui64In: LONG64, pi64Out: *mut ULONG64, )621     pub fn VarUI8FromI8(
622         ui64In: LONG64,
623         pi64Out: *mut ULONG64,
624     );
VarUI8FromR4( fltIn: FLOAT, pi64Out: *mut ULONG64, )625     pub fn VarUI8FromR4(
626         fltIn: FLOAT,
627         pi64Out: *mut ULONG64,
628     );
VarUI8FromR8( dblIn: DOUBLE, pi64Out: *mut ULONG64, )629     pub fn VarUI8FromR8(
630         dblIn: DOUBLE,
631         pi64Out: *mut ULONG64,
632     );
VarUI8FromDate( dateIn: DATE, pi64Out: *mut ULONG64, )633     pub fn VarUI8FromDate(
634         dateIn: DATE,
635         pi64Out: *mut ULONG64,
636     );
VarUI8FromStr( strIn: LPCOLESTR, lcid: LCID, dwFlags: ULONG, pi64Out: *mut ULONG64, )637     pub fn VarUI8FromStr(
638         strIn: LPCOLESTR,
639         lcid: LCID,
640         dwFlags: ULONG,
641         pi64Out: *mut ULONG64,
642     );
VarUI8FromI1( cIn: CHAR, pi64Out: *mut ULONG64, )643     pub fn VarUI8FromI1(
644         cIn: CHAR,
645         pi64Out: *mut ULONG64,
646     );
VarUI8FromUI2( uiIn: USHORT, pi64Out: *mut ULONG64, )647     pub fn VarUI8FromUI2(
648         uiIn: USHORT,
649         pi64Out: *mut ULONG64,
650     );
VarUI8FromUI4( ulIn: ULONG, pi64Out: *mut ULONG64, )651     pub fn VarUI8FromUI4(
652         ulIn: ULONG,
653         pi64Out: *mut ULONG64,
654     );
VarUI8FromDec( pdecIn: *const DECIMAL, pi64Out: *mut ULONG64, )655     pub fn VarUI8FromDec(
656         pdecIn: *const DECIMAL,
657         pi64Out: *mut ULONG64,
658     );
VarDecFromUI1( bIn: BYTE, pdecOut: *mut DECIMAL, )659     pub fn VarDecFromUI1(
660         bIn: BYTE,
661         pdecOut: *mut DECIMAL,
662     );
VarDecFromI2( uiIn: SHORT, pdecOut: *mut DECIMAL, )663     pub fn VarDecFromI2(
664         uiIn: SHORT,
665         pdecOut: *mut DECIMAL,
666     );
VarDecFromI4( lIn: LONG, pdecOut: *mut DECIMAL, )667     pub fn VarDecFromI4(
668         lIn: LONG,
669         pdecOut: *mut DECIMAL,
670     );
VarDecFromI8( i64In: LONG64, pdecOut: *mut DECIMAL, )671     pub fn VarDecFromI8(
672         i64In: LONG64,
673         pdecOut: *mut DECIMAL,
674     );
VarDecFromR4( fltIn: FLOAT, pdecOut: *mut DECIMAL, )675     pub fn VarDecFromR4(
676         fltIn: FLOAT,
677         pdecOut: *mut DECIMAL,
678     );
VarDecFromR8( dblIn: DOUBLE, pdecOut: *mut DECIMAL, )679     pub fn VarDecFromR8(
680         dblIn: DOUBLE,
681         pdecOut: *mut DECIMAL,
682     );
VarDecFromDate( dateIn: DATE, pdecOut: *mut DECIMAL, )683     pub fn VarDecFromDate(
684         dateIn: DATE,
685         pdecOut: *mut DECIMAL,
686     );
VarDecFromStr( strIn: LPCOLESTR, lcid: LCID, dwFlags: ULONG, pdecOut: *mut DECIMAL, )687     pub fn VarDecFromStr(
688         strIn: LPCOLESTR,
689         lcid: LCID,
690         dwFlags: ULONG,
691         pdecOut: *mut DECIMAL,
692     );
VarDecFromI1( cIn: CHAR, pdecOut: *mut DECIMAL, )693     pub fn VarDecFromI1(
694         cIn: CHAR,
695         pdecOut: *mut DECIMAL,
696     );
VarDecFromUI2( uiIn: USHORT, pdecOut: *mut DECIMAL, )697     pub fn VarDecFromUI2(
698         uiIn: USHORT,
699         pdecOut: *mut DECIMAL,
700     );
VarDecFromUI4( ulIn: ULONG, pdecOut: *mut DECIMAL, )701     pub fn VarDecFromUI4(
702         ulIn: ULONG,
703         pdecOut: *mut DECIMAL,
704     );
VarDecFromUI8( ui64In: ULONG64, pdecOut: *mut DECIMAL, )705     pub fn VarDecFromUI8(
706         ui64In: ULONG64,
707         pdecOut: *mut DECIMAL,
708     );
VarDecAdd( pdecLeft: LPDECIMAL, pdecRight: LPDECIMAL, pdecResult: LPDECIMAL, )709     pub fn VarDecAdd(
710         pdecLeft: LPDECIMAL,
711         pdecRight: LPDECIMAL,
712         pdecResult: LPDECIMAL,
713     );
VarDecDiv( pdecLeft: LPDECIMAL, pdecRight: LPDECIMAL, pdecResult: LPDECIMAL, )714     pub fn VarDecDiv(
715         pdecLeft: LPDECIMAL,
716         pdecRight: LPDECIMAL,
717         pdecResult: LPDECIMAL,
718     );
VarDecMul( pdecLeft: LPDECIMAL, pdecRight: LPDECIMAL, pdecResult: LPDECIMAL, )719     pub fn VarDecMul(
720         pdecLeft: LPDECIMAL,
721         pdecRight: LPDECIMAL,
722         pdecResult: LPDECIMAL,
723     );
VarDecSub( pdecLeft: LPDECIMAL, pdecRight: LPDECIMAL, pdecResult: LPDECIMAL, )724     pub fn VarDecSub(
725         pdecLeft: LPDECIMAL,
726         pdecRight: LPDECIMAL,
727         pdecResult: LPDECIMAL,
728     );
VarDecAbs( pdecIn: LPDECIMAL, pdecResult: LPDECIMAL, )729     pub fn VarDecAbs(
730         pdecIn: LPDECIMAL,
731         pdecResult: LPDECIMAL,
732     );
VarDecFix( pdecIn: LPDECIMAL, pdecResult: LPDECIMAL, )733     pub fn VarDecFix(
734         pdecIn: LPDECIMAL,
735         pdecResult: LPDECIMAL,
736     );
VarDecInt( pdecIn: LPDECIMAL, pdecResult: LPDECIMAL, )737     pub fn VarDecInt(
738         pdecIn: LPDECIMAL,
739         pdecResult: LPDECIMAL,
740     );
VarDecNeg( pdecIn: LPDECIMAL, pdecResult: LPDECIMAL, )741     pub fn VarDecNeg(
742         pdecIn: LPDECIMAL,
743         pdecResult: LPDECIMAL,
744     );
VarDecRound( pdecIn: LPDECIMAL, cDecimals: c_int, pdecResult: LPDECIMAL, )745     pub fn VarDecRound(
746         pdecIn: LPDECIMAL,
747         cDecimals: c_int,
748         pdecResult: LPDECIMAL,
749     );
VarDecCmp( pdecLeft: LPDECIMAL, pdecRight: LPDECIMAL, )750     pub fn VarDecCmp(
751         pdecLeft: LPDECIMAL,
752         pdecRight: LPDECIMAL,
753     );
VarDecCmpR8( pdecLeft: LPDECIMAL, dblRight: c_double, )754     pub fn VarDecCmpR8(
755         pdecLeft: LPDECIMAL,
756         dblRight: c_double,
757     );
VarBstrCat( bstrLeft: BSTR, bstrRight: BSTR, pbstrResult: LPBSTR, )758     pub fn VarBstrCat(
759         bstrLeft: BSTR,
760         bstrRight: BSTR,
761         pbstrResult: LPBSTR,
762     );
VarBstrCmp( bstrLeft: BSTR, bstrRight: BSTR, lcid: LCID, dwFlags: ULONG, )763     pub fn VarBstrCmp(
764         bstrLeft: BSTR,
765         bstrRight: BSTR,
766         lcid: LCID,
767         dwFlags: ULONG,
768     );
VarR8Pow( dblLeft: c_double, dblRight: c_double, pdblResult: *mut c_double, )769     pub fn VarR8Pow(
770         dblLeft: c_double,
771         dblRight: c_double,
772         pdblResult: *mut c_double,
773     );
VarR4CmpR8( fltLeft: c_float, dblRight: c_double, )774     pub fn VarR4CmpR8(
775         fltLeft: c_float,
776         dblRight: c_double,
777     );
VarR8Round( dblIn: c_double, cDecimals: c_int, pdblResult: *mut c_double, )778     pub fn VarR8Round(
779         dblIn: c_double,
780         cDecimals: c_int,
781         pdblResult: *mut c_double,
782     );
GetAltMonthNames( lcid: LCID, prgp: *mut LPOLESTR, )783     pub fn GetAltMonthNames(
784         lcid: LCID,
785         prgp: *mut LPOLESTR,
786     );
787 }
788 pub type DISPID = LONG;
789 pub type MEMBERID = DISPID;
790 pub const MEMBERID_NIL: MEMBERID = DISPID_UNKNOWN;
791 pub const DISPATCH_METHOD: WORD = 0x1;
792 pub const DISPATCH_PROPERTYGET: WORD = 0x2;
793 pub const DISPATCH_PROPERTYPUT: WORD = 0x4;
794 pub const DISPATCH_PROPERTYPUTREF: WORD = 0x8;
795 ENUM!{enum REGKIND {
796     REGKIND_DEFAULT = 0,
797     REGKIND_REGISTER,
798     REGKIND_NONE,
799 }}
800 extern "system" {
LoadTypeLibEx( szFile: LPCOLESTR, regkind: REGKIND, pptlib: *mut *mut ITypeLib, ) -> HRESULT801     pub fn LoadTypeLibEx(
802         szFile: LPCOLESTR,
803         regkind: REGKIND,
804         pptlib: *mut *mut ITypeLib,
805     ) -> HRESULT;
RevokeActiveObject( dwRegister: DWORD, pvReserved: *mut c_void, )806     pub fn RevokeActiveObject(
807         dwRegister: DWORD,
808         pvReserved: *mut c_void,
809     );
OaBuildVersion() -> ULONG810     pub fn OaBuildVersion() -> ULONG;
OaEnablePerUserTLibRegistration()811     pub fn OaEnablePerUserTLibRegistration();
812 }
813