1 // Copyright 2016 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
11 use os::windows::prelude::*;
13 use ffi::{CString, OsStr};
17 pub struct DynamicLibrary {
22 pub fn open(filename: &str) -> io::Result<DynamicLibrary> {
23 let filename = OsStr::new(filename)
28 c::LoadLibraryW(filename.as_ptr())
31 Err(io::Error::last_os_error())
33 Ok(DynamicLibrary { handle: result })
37 pub fn symbol(&self, symbol: &str) -> io::Result<usize> {
38 let symbol = CString::new(symbol)?;
40 match c::GetProcAddress(self.handle, symbol.as_ptr()) as usize {
41 0 => Err(io::Error::last_os_error()),
48 impl Drop for DynamicLibrary {
51 c::FreeLibrary(self.handle);