#![allow(non_snake_case, non_camel_case_types)]
use core::ffi::c_void;
use super::structs::{SAFEARRAY, SAFEARRAYBOUND};
use crate::os::windows::types::{BSTR, DWORD, HRESULT, LPVOID, REFCLSID, REFIID};
pub type CLRCreateInstance_t = unsafe extern "system" fn(
clsid: REFCLSID,
riid: REFIID,
ppInterface: *mut LPVOID,
) -> HRESULT;
pub type CorBindToRuntime_t = unsafe extern "system" fn(
pwszVersion: *const u16,
pwszBuildFlavor: *const u16,
rclsid: REFCLSID,
riid: REFIID,
ppv: *mut LPVOID,
) -> HRESULT;
pub type CoCreateInstance_t = unsafe extern "system" fn(
rclsid: *const REFCLSID,
pUnkOuter: *mut c_void,
dwClsContext: u32,
riid: REFIID,
ppv: *mut *mut c_void,
) -> HRESULT;
pub type CoInitializeEx_t = unsafe extern "system" fn(pvReserved: LPVOID, dwCoInit: DWORD) -> HRESULT;
pub type CoUninitialize_t = unsafe extern "system" fn();
pub type SysAllocString_t = unsafe extern "system" fn(psz: *const u16) -> BSTR;
pub type SysFreeString_t = unsafe extern "system" fn(bstr: BSTR);
pub type SafeArrayCreate_t = unsafe extern "system" fn(
vt: u16,
cDims: u32,
rgsabound: *const SAFEARRAYBOUND,
) -> *mut SAFEARRAY;
pub type SafeArrayDestroy_t = unsafe extern "system" fn(psa: *mut SAFEARRAY) -> HRESULT;
pub type SafeArrayCreateVector_t = unsafe extern "system" fn(
vt: u16,
lLbound: i32,
cElements: u32,
) -> *mut SAFEARRAY;
pub type SafeArrayPutElement_t = unsafe extern "system" fn(
psa: *mut SAFEARRAY,
rgIndices: *const i32,
pv: *const c_void,
) -> HRESULT;
pub type SafeArrayGetLBound_t = unsafe extern "system" fn(
psa: *mut SAFEARRAY,
nDim: u32,
plLbound: *mut i32,
) -> HRESULT;
pub type SafeArrayGetUBound_t = unsafe extern "system" fn(
psa: *mut SAFEARRAY,
nDim: u32,
plUbound: *mut i32,
) -> HRESULT;
pub type SafeArrayAccessData_t = unsafe extern "system" fn(
psa: *mut SAFEARRAY,
ppvData: *mut *mut c_void,
) -> HRESULT;
pub type SafeArrayUnAccessData_t = unsafe extern "system" fn(psa: *mut SAFEARRAY) -> HRESULT;
pub type SafeArrayGetElement_t = unsafe extern "system" fn(
psa: *mut SAFEARRAY,
rgIndices: *const i32,
pv: *mut c_void,
) -> HRESULT;
pub type CreateInterface_t = unsafe extern "system" fn(
clsid: REFCLSID,
iid: REFIID,
interface: *mut *mut c_void,
) -> HRESULT;