use super::*;

/// Attempts to load a function from a given library.
///
/// This is a small wrapper around `LoadLibrary` and `GetProcAddress`.
///
/// # Safety
///
/// * Both the library and function names must be valid null-terminated strings.
pub unsafe fn delay_load<T>(library: crate::PCSTR, function: crate::PCSTR) -> Option<T> {
    let library = LoadLibraryExA(library.0, 0, LOAD_LIBRARY_SEARCH_DEFAULT_DIRS);

    if library == 0 {
        return None;
    }

    let address = GetProcAddress(library, function.0);

    if address.is_some() {
        return Some(core::mem::transmute_copy(&address));
    }

    FreeLibrary(library);
    None
}
