use crate::*;
use bindings::Windows::Win32::Com::{CoCreateInstance, CoInitializeEx, COINIT};
pub fn initialize_mta() -> Result<()> {
unsafe { CoInitializeEx(std::ptr::null_mut(), COINIT::COINIT_MULTITHREADED.0 as u32).ok() }
}
pub fn initialize_sta() -> Result<()> {
unsafe {
CoInitializeEx(
std::ptr::null_mut(),
COINIT::COINIT_APARTMENTTHREADED.0 as u32,
)
.ok()
}
}
pub fn create_instance<T: Interface>(clsid: &Guid) -> Result<T> {
let mut object = None;
unsafe { CoCreateInstance(clsid, None, CLSCTX_ALL, &T::IID, object.set_abi()).and_some(object) }
}
const CLSCTX_ALL: u32 = 23;