Calls the function handle `func` returned by ffi_prepare(). `args`
must have exactly the prepared argument count; each element is an
int, a float, or a buffer (never a string — LPC strings are
UTF-8-native and never implicitly marshalled to char*), matching the
prepared argument type codes.
The return value follows `ret_type`: an int or float for scalar
types, a buffer for an owned FFI_POINTER result or an int address for
a raw foreign pointer, and 0 for FFI_VOID. Argument-count or -type
mismatches raise an error rather than calling C with a bad frame.