Expand description
§Introduction
A module to handle conversion to and from common OLE/COM types - VARIANT, SAFEARRAY, and BSTR.
This module provides some convenience types as well as traits and trait implementations for
built in rust types - u8, i8, u16, i16, u32, i32, u64, i64, f32, f64, String, bool
to and from VARIANT structures.
In addition, Vec<T> can be converted into a SAFEARRAY where T is one of
i8, u8, u16, i16, u32, i32, String, f32, f64, bool.
As well, IUnknown, IDispatch pointers can be marshalled back and forth across boundaries.
There are some convenience types provided for further types that VARIANT/SAFEARRAY support:
SCode, Int, UInt, Currency, Date, DecWrapper, VtEmpty, VtNull
The relevant traits to use are: BStringExt, SafeArrayElement, SafeArrayExt, and VariantExt
§Examples
An example of how to use the module:
extern crate oaidl;
extern crate widestring;
extern crate winapi;
use widestring::U16String;
use winapi::um::oaidl::VARIANT;
use oaidl::{BStringExt, IntoVariantError, VariantExt};
//simulate an FFI function
unsafe fn c_masq(s: *mut VARIANT, p: *mut VARIANT) {
println!("vt of s: {}", (*s).n1.n2_mut().vt);
println!("vt of p: {}", (*p).n1.n2_mut().vt);
//free the memory allocated for these VARIANTS
let s = *s;
let p = *p;
}
fn main() -> Result<(), IntoVariantError> {
let mut u = 1337u32;
let mut sr = U16String::from_str("Turing completeness.");
let p = VariantExt::<u32>::into_variant(u)?;
let s = VariantExt::<*mut u16>::into_variant(sr)?;
unsafe {c_masq(s.as_ptr(), p.as_ptr())};
Ok(())
}
Structs§
- Currency
- Helper type for the OLE/COM+ type CY
- Date
- Helper type for the OLE/COM+ type DATE
- DecWrapper
- Helper type for the OLE/COM+ type DECIMAL
- DroppableB
String - Struct that holds pointer to Sys* allocated memory. It will automatically free the memory via the Sys* functions unless it has been consumed.
- Int
- Helper type for the OLE/COM+ type INT
- Ptr
- Convenience type for holding value of
*mut TMostly just a projection ofNonNull<T>functionality - SCode
- Helper type for the OLE/COM+ type SCODE
- UInt
- Helper type for the OLE/COM+ type UINT
- Variant
- Container for variant-compatible types. Wrap them with this so that the output VARIANT structure has vt == VT_VARIANT and the data is a *mut VARIANT.
- Variant
Bool - Helper type for the OLE/COM+ type VARIANT_BOOL
- VtEmpty
- Helper type for VT_EMPTY variants
- VtNull
- Helper type for VT_NULL variants
Enums§
- BString
Error - Ways BString can fail. Currently just one way.
- Conversion
Error - Errors which can arise primarily from using
Conversion::convertcalls - Element
Error - Supererror type for SafeArray element conversion errors
- From
Safe ArrElem Error - Errors for converting from C/C++ data structure to Rust types
- From
Safe Array Error - Represents the different ways converting from
SAFEARRAYcan fail - From
Variant Error - Encapsulates the ways converting from a
VARIANTcan fail. - Into
Safe ArrElem Error - Errors for converting into C/C++ data structures from Rust types
- Into
Safe Array Error - Represents the different ways converting into
SAFEARRAYcan fail - Into
Variant Error - Encapsulates errors that can occur during conversion into VARIANT
- Safe
Array Error - Supererror for SafeArray errors
Traits§
- BString
Ext - This trait is implemented on
U16Stringto enable the convenient and safe conversion of It utilizes the Sys* functions to manage the allocated memory. Generally you will want to useallocate_managed_bstrbecause it provides a type that will automatically free the BSTR when dropped. - Safe
Array Element - Helper trait implemented for types that can be converted into a safe array.
- Safe
Array Ext - Workhorse trait and main interface for converting to/from SAFEARRAY.
Default impl is on
ExactSizeIterator<Item=SafeArrayElement> - TryConvert
- Pseudo-
Fromtrait because of orphan rules - Variant
Ext - Trait implemented to convert the type into a VARIANT. Do not implement this yourself without care.