mod literals; #[doc(hidden)] pub use literals::*; pub type HRESULT = i32; pub type HSTRING = *mut ::core::ffi::c_void; pub type IUnknown = *mut ::core::ffi::c_void; pub type IInspectable = *mut ::core::ffi::c_void; pub type PSTR = *mut u8; pub type PWSTR = *mut u16; pub type PCSTR = *const u8; pub type PCWSTR = *const u16; pub type BSTR = *const u16; #[repr(C)] pub struct GUID { pub data1: u32, pub data2: u16, pub data3: u16, pub data4: [u8; 8], } impl ::core::marker::Copy for GUID {} impl ::core::clone::Clone for GUID { fn clone(&self) -> Self { *self } } impl GUID { pub const fn from_u128(uuid: u128) -> Self { Self { data1: (uuid >> 96) as u32, data2: (uuid >> 80 & 0xffff) as u16, data3: (uuid >> 64 & 0xffff) as u16, data4: (uuid as u64).to_be_bytes() } } } #[cfg(all(windows_raw_dylib, target_arch = "x86"))] #[macro_export] #[doc(hidden)] macro_rules! link { ($library:literal $abi:literal $(#[$($doc:tt)*])* fn $name:ident($($arg:ident: $argty:ty),*)->$ret:ty) => ( #[link(name = $library, kind = "raw-dylib", modifiers = "+verbatim", import_name_type = "undecorated")] extern $abi { pub fn $name($($arg: $argty),*) -> $ret; } ) } #[cfg(all(windows_raw_dylib, not(target_arch = "x86")))] #[macro_export] #[doc(hidden)] macro_rules! link { ($library:literal $abi:literal $(#[$($doc:tt)*])* fn $name:ident($($arg:ident: $argty:ty),*)->$ret:ty) => ( #[link(name = $library, kind = "raw-dylib", modifiers = "+verbatim")] extern "system" { pub fn $name($($arg: $argty),*) -> $ret; } ) } #[cfg(not(windows_raw_dylib))] #[macro_export] #[doc(hidden)] macro_rules! link { ($library:literal $abi:literal $(#[$($doc:tt)*])* fn $name:ident($($arg:ident: $argty:ty),*)->$ret:ty) => ( #[link(name = "windows")] extern $abi { $(#[$($doc)*])* pub fn $name($($arg: $argty),*) -> $ret; } ) } #[doc(hidden)] pub use crate::link;