1#![allow(non_snake_case)]
2
3use crate::co;
4use crate::decl::*;
5use crate::kernel::privs::*;
6use crate::ole::privs::*;
7use crate::oleaut::ffi;
8use crate::prelude::*;
9
10#[must_use]
31pub fn OleLoadPicture(
32	stream: &impl ole_IStream,
33	size: Option<u32>,
34	keep_original_format: bool,
35) -> HrResult<IPicture> {
36	let mut queried = unsafe { IPicture::null() };
37	HrRet(unsafe {
38		ffi::OleLoadPicture(
39			stream.ptr() as _,
40			size.unwrap_or_default() as _,
41			!keep_original_format as _, pcvoid(&IPicture::IID),
43			queried.as_mut(),
44		)
45	})
46	.to_hrresult()
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	HrRet(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	.to_hrresult()
73	.map(|_| queried)
74}
75
76#[must_use]
79pub fn PSGetNameFromPropertyKey(prop_key: &co::PKEY) -> HrResult<String> {
80	let mut pstr = std::ptr::null_mut::<u16>();
81	HrRet(unsafe { ffi::PSGetNameFromPropertyKey(pcvoid(prop_key), &mut pstr) })
82		.to_hrresult()
83		.map(|_| htaskmem_ptr_to_str(pstr))
84}
85
86#[must_use]
96pub fn SystemTimeToVariantTime(st: &SYSTEMTIME) -> SysResult<f64> {
97	let mut double = f64::default();
98	BoolRet(unsafe { ffi::SystemTimeToVariantTime(pcvoid(st), &mut double) })
99		.to_invalidparm()
100		.map(|_| double)
101}
102
103#[must_use]
110pub fn VariantTimeToSystemTime(var_time: f64) -> SysResult<SYSTEMTIME> {
111	let mut st = SYSTEMTIME::default();
112	BoolRet(unsafe { ffi::VariantTimeToSystemTime(var_time, pvoid(&mut st)) })
113		.to_invalidparm()
114		.map(|_| st)
115}