| // 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")); |
| } |
| } |
| } |