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.
12 use os::windows::prelude::*;
14 use ffi::{CString, OsStr};
18 pub struct DynamicLibrary {
23 pub fn open(filename: &str) -> io::Result<DynamicLibrary> {
24 let filename = OsStr::new(filename)
29 c::LoadLibraryW(filename.as_ptr())
32 Err(io::Error::last_os_error())
34 Ok(DynamicLibrary { handle: result })
38 pub fn symbol(&self, symbol: &str) -> io::Result<usize> {
39 let symbol = try!(CString::new(symbol));
41 match c::GetProcAddress(self.handle, symbol.as_ptr()) as usize {
42 0 => Err(io::Error::last_os_error()),
49 impl Drop for DynamicLibrary {
52 c::FreeLibrary(self.handle);