is it possible to pass variadic arguments from rust to C function?
extern "C" fn foo(fmt: const *i8, args: ...) {
let buf1024 = vec![0; 1024];
// How to pass args to wvsprintfA?
winapi::um::winuser::wvsprintfA(
buf1024.as_mut_ptr(),
fmt,
?
);
}
Based on @Chayim Friedman answer in comments, I ended using GetProcAddr with mem::transmute:
let dll_handle = LoadLibrary("user32.dll");
let func_addr = GetProcAddr(dll_handle, "wvsprintfW");
let f: extern "C" fn(buf: *mut u16, fmt: *const u16, args: std::ffi::VaList) -> u32 = std::mem::transmute(func_addr);
f(out_buf.as_mut_ptr(), fmt.as_ptr(), args.as_va_list());