1#![allow(non_snake_case)]
2
3use crate::co;
4use crate::decl::*;
5use crate::guard::*;
6use crate::kernel::privs::*;
7use crate::ole::privs::*;
8use crate::oleaut::ffi;
9use crate::prelude::*;
10
11#[must_use]
32pub fn OleLoadPicture(
33 stream: &impl ole_IStream,
34 size: Option<u32>,
35 keep_original_format: bool,
36) -> HrResult<IPicture> {
37 let mut queried = unsafe { IPicture::null() };
38 ok_to_hrresult(unsafe {
39 ffi::OleLoadPicture(
40 stream.ptr() as _,
41 size.unwrap_or_default() as _,
42 !keep_original_format as _, pcvoid(&IPicture::IID),
44 queried.as_mut(),
45 )
46 })
47 .map(|_| queried)
48}
49
50#[must_use]
60pub fn OleLoadPicturePath(path: &str, transparent_color: Option<COLORREF>) -> HrResult<IPicture> {
61 let mut queried = unsafe { IPicture::null() };
62 ok_to_hrresult(unsafe {
63 ffi::OleLoadPicturePath(
64 WString::from_str(path).as_ptr(),
65 std::ptr::null_mut(),
66 0,
67 transparent_color.map_or(0, |c| c.into()),
68 pcvoid(&IPicture::IID),
69 queried.as_mut(),
70 )
71 })
72 .map(|_| queried)
73}
74
75#[must_use]
78pub fn PSGetNameFromPropertyKey(prop_key: &co::PKEY) -> HrResult<String> {
79 let mut pstr = std::ptr::null_mut::<u16>();
80 ok_to_hrresult(unsafe { ffi::PSGetNameFromPropertyKey(pcvoid(prop_key), &mut pstr) }).map(
81 |_| {
82 let name = unsafe { WString::from_wchars_nullt(pstr) };
83 let _ = unsafe { CoTaskMemFreeGuard::new(pstr as _, 0) };
84 name.to_string()
85 },
86 )
87}
88
89#[must_use]
99pub fn SystemTimeToVariantTime(st: &SYSTEMTIME) -> SysResult<f64> {
100 let mut double = f64::default();
101 bool_to_invalidparm(unsafe { ffi::SystemTimeToVariantTime(pcvoid(st), &mut double) })
102 .map(|_| double)
103}
104
105#[must_use]
112pub fn VariantTimeToSystemTime(var_time: f64) -> SysResult<SYSTEMTIME> {
113 let mut st = SYSTEMTIME::default();
114 bool_to_invalidparm(unsafe { ffi::VariantTimeToSystemTime(var_time, pvoid(&mut st)) })
115 .map(|_| st)
116}