winapi_ui_automation/um/
oleauto.rs

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