Module emf_core_base_rs_ffi::library[][src]

Library api.

Example

use emf_core_base_rs_ffi::sys::api::SysBinding;
use emf_core_base_rs_ffi::library::api::LibraryBinding;
use emf_core_base_rs_ffi::collections::NonNullConst;
use emf_core_base_rs_ffi::library::{OSPathChar, DEFAULT_HANDLE, LibraryHandle, Error};

unsafe {
    // `base_interface` has the type `&mut dyn CBaseBinding`.
    SysBinding::lock(base_interface);

    // Path of the library. Platform dependent initialisation.
    let lib_path: &OSPathChar = unsafe { std::mem::MaybeUninit::uninit().assume_init() };

    let handle = match LibraryBinding::load(
            base_interface,
            DEFAULT_HANDLE,
            NonNullConst::from(lib_path)
            ).to_result() {
        Ok(handle) => handle,
        Err(_) => {
            SysBinding::panic(
                base_interface,
                Some(NonNullConst::from(b"Unable to load the library.\0"))
            );
        }
    };

    let symbol: unsafe extern "C" fn(i32, i32) -> i32 =
        match LibraryBinding::get_function_symbol(
            base_interface,
            handle,
            NonNullConst::from(b"add_fn\0")
            ).to_result() {
        Ok(sym) => {
            std::mem::transmute(sym.symbol)
        },
        Err(_) => {
            SysBinding::panic(base_interface,
                Some(NonNullConst::from(b"Unable to find the symbol.\0"))
            );
        }
    };

    assert_eq!(symbol(3, 5), 8);

    match LibraryBinding::unload(base_interface, handle).to_result() {
        Ok(_) => {}
        Err(_) => {
            SysBinding::panic(base_interface,
                Some(NonNullConst::from(b"Unable to unload the library.\0"))
            );
        }
    }

    SysBinding::unlock(base_interface);
}

Modules

api

Library api.

library_loader

Interface of a library loader.

Structs

InternalHandle

Internal handle to a library.

LibraryHandle

Handle to a library.

LoaderHandle

Handle to a loader.

Symbol

A symbol from a library.

Enums

Error

Library api errors.

PredefinedHandles

Predefined loader handles.

Constants

DEFAULT_HANDLE

Handle of the native library loader.

LOADER_TYPE_MAX_LENGTH

Max length of a library type.

NATIVE_LIBRARY_TYPE_NAME

Name of the native library type.

Type Definitions

LibraryType

Library type.

OSPathChar

Character type of a path.

OSPathCharUnix

Character type of a unix path.

OSPathCharWindows

Character type of a windows path.