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