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>7 pub 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