| use crate::os::windows::prelude::*; |
| use crate::ffi::{CString, OsStr}; |
| pub struct DynamicLibrary { |
| pub fn open(filename: &str) -> io::Result<DynamicLibrary> { |
| let filename = OsStr::new(filename) |
| c::LoadLibraryW(filename.as_ptr()) |
| Err(io::Error::last_os_error()) |
| Ok(DynamicLibrary { handle: result }) |
| pub fn symbol(&self, symbol: &str) -> io::Result<usize> { |
| let symbol = CString::new(symbol)?; |
| match c::GetProcAddress(self.handle, symbol.as_ptr()) as usize { |
| 0 => Err(io::Error::last_os_error()), |
| impl Drop for DynamicLibrary { |
| c::FreeLibrary(self.handle); |