6 个版本 (3 个重大更新)
0.4.0 | 2024 年 2 月 2 日 |
---|---|
0.3.1 | 2023 年 4 月 29 日 |
0.2.1 | 2023 年 1 月 13 日 |
0.1.0 | 2022 年 7 月 13 日 |
#327 in 数据结构
每月下载量 1,280
用于 inline-vbs
42KB
947 代码行
variant-rs
variant-rs
是一个 Rust crate,它提供了对 COM VARIANT
类型的惯用处理。Rust 默认支持判别联合类型,因此尽管 VARIANT
通常很难处理,但 Rust 使编码和解码变得容易。
该 crate 设计与 winapi
crate 中的 VARIANT
类型一起工作。
基本用法
use variant_rs::*;
fn main() {
let v1 = Variant::I32(123); // manual instanciation
let v2 = 123i32.to_variant(); // ToVariant trait
let v3 = 123.into(); // From / Into traits
assert_eq!(v1, v2);
assert_eq!(v1, v3);
let bstr: Variant = "Hello, world!".into();
let ptr: VARIANT = bstr.clone().try_into().unwrap(); // convert to COM VARIANT
let back: Variant = ptr.try_into().unwrap(); // convert back
assert_eq!(bstr, back);
}
支持的 VARIANT
类型及其对应类型
VARIANT 类型 |
Rust 类型 | Rust 类型 (BY_REF) |
---|---|---|
VT_EMPTY |
() |
N/A |
VT_NULL |
() |
N/A |
VT_I1 |
i8 |
PSTR |
VT_I2 |
i16 |
&'static mut i16 |
VT_I4 |
i32 |
&'static mut i32 |
VT_I8 |
i64 |
&'static mut i64 |
VT_UI1 |
u8 |
&'static mut u8 |
VT_UI2 |
u16 |
&'static mut u16 |
VT_UI4 |
u32 |
&'static mut u32 |
VT_UI8 |
u64 |
&'static mut u64 |
VT_INT |
i32 |
&'static mut i32 |
VT_UINT |
u32 |
&'static mut u32 |
VT_R4 |
f32 |
&'static mut f32 |
VT_R8 |
f64 |
&'static mut f64 |
VT_BOOL |
bool |
&'static mutComBool |
VT_BSTR |
BSTR |
&'static mut BSTR |
VT_ERROR |
HRESULT (i32 ) |
i16 -backed enum. |
VT_CY |
Currency |
&'static mutComCurrency |
VT_DATE |
NaiveDateTime |
&'static mutComDate |
VT_DECIMAL |
Decimal |
&'static mutComDecimal |
VT_UNKNOWN |
Option<IUnknown> |
N/A |
VT_DISPATCH |
Option<IDispatch> |
N/A |
VT_VARIANT |
N/A | PtrWrapper<VARIANT> |
包装类型
ComBool
i16
-backed enum.
ComCurrency
将 COM 的 i64
货币数据 CY
映射到 Decimal
。
ComDecimal
将 COM 的 96 位十进制数 DECIMAL
映射到 Decimal
。
ComData
将 COM 的 DATE
(从 1899-12-30 开始的毫秒数 f64
)映射到 NaiveDateTime
。
PtrWrapper
COM 接口指针的安全包装。
安装
将以下内容添加到您的 Cargo.toml
[dependencies]
variant-rs = "0.4.0"
许可证
本项目许可方式为以下之一
- Apache License,版本 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 https://opensource.org/licenses/MIT)由您选择。
依赖项
~130MB
~2M SLoC