diff options
| author | bjorn3 <17426603+bjorn3@users.noreply.github.com> | 2024-08-09 17:18:46 +0000 |
|---|---|---|
| committer | bjorn3 <17426603+bjorn3@users.noreply.github.com> | 2024-08-09 17:18:46 +0000 |
| commit | 3ea9313de3be4d19371e64c2a58b19bc8ff86983 (patch) | |
| tree | 73e720c016fa9b79b8afc11b0a139ad7a4319023 /example | |
| parent | e96ece7c0bf59cbf21e39585027aab30dc753d0c (diff) | |
Merge commit '69b3f5a426a5c1c05236a45b36f6679d95fbe01b' into sync_cg_clif-2024-08-09
Diffstat (limited to 'example')
| -rw-r--r-- | example/raw-dylib.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/example/raw-dylib.rs b/example/raw-dylib.rs new file mode 100644 index 00000000000..4711884f76a --- /dev/null +++ b/example/raw-dylib.rs @@ -0,0 +1,31 @@ +// Tests the raw-dylib feature for Windows. +// https://doc.rust-lang.org/reference/items/external-blocks.html#the-link-attribute + +fn main() { + #[cfg(windows)] + { + #[link(name = "kernel32", kind = "raw-dylib")] + extern "C" { + fn GetModuleFileNameA( + module: *mut std::ffi::c_void, + filename: *mut u8, + size: u32, + ) -> u32; + } + + // Get the filename of the current executable.... + let mut buffer = [0u8; 1024]; + let size = unsafe { + GetModuleFileNameA(core::ptr::null_mut(), buffer.as_mut_ptr(), buffer.len() as u32) + }; + if size == 0 { + eprintln!("failed to get module file name: {}", std::io::Error::last_os_error()); + return; + } else { + // ...and make sure that it matches the test name. + let filename = + std::ffi::CStr::from_bytes_with_nul(&buffer[..size as usize + 1]).unwrap(); + assert!(filename.to_str().unwrap().ends_with("raw-dylib.exe")); + } + } +} |
