1 #![allow( 2 dead_code, 3 non_snake_case, 4 non_camel_case_types, 5 non_upper_case_globals 6 )] 7 8 extern crate libloading; 9 pub struct TestLib { 10 __library: ::libloading::Library, 11 pub foo: unsafe extern "C" fn( 12 x: ::std::os::raw::c_int, 13 y: ::std::os::raw::c_int, 14 ) -> ::std::os::raw::c_int, 15 pub bar: unsafe extern "C" fn( 16 x: *mut ::std::os::raw::c_void, 17 ) -> ::std::os::raw::c_int, 18 pub baz: unsafe extern "C" fn() -> ::std::os::raw::c_int, 19 } 20 impl TestLib { newnull21 pub unsafe fn new<P>(path: P) -> Result<Self, ::libloading::Error> 22 where 23 P: AsRef<::std::ffi::OsStr>, 24 { 25 let library = ::libloading::Library::new(path)?; 26 Self::from_library(library) 27 } from_librarynull28 pub unsafe fn from_library<L>( 29 library: L, 30 ) -> Result<Self, ::libloading::Error> 31 where 32 L: Into<::libloading::Library>, 33 { 34 let __library = library.into(); 35 let foo = __library.get(b"foo\0").map(|sym| *sym)?; 36 let bar = __library.get(b"bar\0").map(|sym| *sym)?; 37 let baz = __library.get(b"baz\0").map(|sym| *sym)?; 38 Ok(TestLib { 39 __library, 40 foo, 41 bar, 42 baz, 43 }) 44 } foonull45 pub unsafe fn foo( 46 &self, 47 x: ::std::os::raw::c_int, 48 y: ::std::os::raw::c_int, 49 ) -> ::std::os::raw::c_int { 50 (self.foo)(x, y) 51 } barnull52 pub unsafe fn bar( 53 &self, 54 x: *mut ::std::os::raw::c_void, 55 ) -> ::std::os::raw::c_int { 56 (self.bar)(x) 57 } baznull58 pub unsafe fn baz(&self) -> ::std::os::raw::c_int { 59 (self.baz)() 60 } 61 } 62