1 use super::*; 2 use bindings::*; 3 4 use Windows::Win32::Foundation::GetLastError; 5 use Windows::Win32::System::LibraryLoader::{FreeLibrary, GetProcAddress, LoadLibraryA}; 6 delay_load(library: &str, function: &str) -> std::result::Result<RawPtr, HRESULT>7pub fn delay_load(library: &str, function: &str) -> std::result::Result<RawPtr, HRESULT> { 8 unsafe { 9 let library = LoadLibraryA(library); 10 11 if library.is_invalid() { 12 return Err(GetLastError().into()); 13 } 14 15 if let Some(address) = GetProcAddress(library, function) { 16 Ok(address as _) 17 } else { 18 FreeLibrary(library); 19 Err(GetLastError().into()) 20 } 21 } 22 } 23