Struct dlopen::wrapper::Container [−][src]
Container for both a dynamic load library handle and its API.
Keeping both library and its symbols together makes it safe to use it because symbols are released
together with the library. Container
also doesn’t have any external lifetimes - this makes it
easy to use Container
inside structures.
#Example
#[macro_use] extern crate dlopen_derive; extern crate dlopen; extern crate libc; use dlopen::wrapper::{Container, WrapperApi}; use libc::{c_char}; use std::ffi::CStr; #[derive(WrapperApi)] struct Example<'a> { do_something: extern "C" fn(), add_one: unsafe extern "C" fn (arg: i32) -> i32, global_count: &'a mut u32, c_string: * const c_char } //wrapper for c_string won't be generated, implement it here impl<'a> Example<'a> { pub fn c_string(&self) -> &CStr { unsafe {CStr::from_ptr(self.c_string)} } } fn main () { let mut container: Container<Example> = unsafe { Container::load("libexample.dylib")}.unwrap(); container.do_something(); let _result = unsafe { container.add_one(5) }; *container.global_count_mut() += 1; println!("C string: {}", container.c_string().to_str().unwrap()) }
Implementations
impl<T> Container<T> where
T: WrapperApi,
[src]
T: WrapperApi,
pub unsafe fn load<S>(name: S) -> Result<Container<T>, Error> where
S: AsRef<OsStr>,
[src]
S: AsRef<OsStr>,
Open the library using provided file name or path and load all symbols.
pub unsafe fn load_self() -> Result<Container<T>, Error>
[src]
Load all symbols from the program itself.
This allows a shared library to load symbols of the program it was loaded into.
Trait Implementations
impl<T> Deref for Container<T> where
T: WrapperApi,
[src]
T: WrapperApi,
impl<T> DerefMut for Container<T> where
T: WrapperApi,
[src]
T: WrapperApi,
Auto Trait Implementations
impl<T> RefUnwindSafe for Container<T> where
T: RefUnwindSafe,
T: RefUnwindSafe,
impl<T> Send for Container<T> where
T: Send,
T: Send,
impl<T> Sync for Container<T> where
T: Sync,
T: Sync,
impl<T> Unpin for Container<T> where
T: Unpin,
T: Unpin,
impl<T> UnwindSafe for Container<T> where
T: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,