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