summaryrefslogtreecommitdiffstats
path: root/vendor/windows-sys/src/core/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/windows-sys/src/core/mod.rs')
-rw-r--r--vendor/windows-sys/src/core/mod.rs66
1 files changed, 57 insertions, 9 deletions
diff --git a/vendor/windows-sys/src/core/mod.rs b/vendor/windows-sys/src/core/mod.rs
index ec66a2bb6..01a40f5db 100644
--- a/vendor/windows-sys/src/core/mod.rs
+++ b/vendor/windows-sys/src/core/mod.rs
@@ -3,6 +3,16 @@ 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,
@@ -10,19 +20,57 @@ pub struct GUID {
pub data3: u16,
pub data4: [u8; 8],
}
+
impl ::core::marker::Copy for GUID {}
+
impl ::core::clone::Clone for GUID {
fn clone(&self) -> Self {
*self
}
}
-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;
+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;