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