1use 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}