godot_variant cb_standard_varcall(void *handle, godot_string *p_procedure, godot_array *p_args) { if (handle == NULL) { ERR_PRINT("No valid library handle, can't call standard varcall procedure"); godot_variant ret; godot_variant_new_nil(&ret); return ret; } void *library_proc; Error err = OS::get_singleton()->get_dynamic_library_symbol_handle( handle, *(String *)p_procedure, library_proc, true); // we roll our own message if (err != OK) { ERR_PRINT((String("GDNative procedure \"" + *(String *)p_procedure) + "\" does not exists and can't be called").utf8().get_data()); godot_variant ret; godot_variant_new_nil(&ret); return ret; } godot_gdnative_procedure_fn proc; proc = (godot_gdnative_procedure_fn)library_proc; return proc(NULL, p_args); }
godot_variant GDAPI godot_method_bind_call(godot_method_bind *p_method_bind, godot_object *p_instance, const godot_variant **p_args, const int p_arg_count, godot_variant_call_error *p_call_error) { MethodBind *mb = (MethodBind *)p_method_bind; Object *o = (Object *)p_instance; const Variant **args = (const Variant **)p_args; godot_variant ret; godot_variant_new_nil(&ret); Variant *ret_val = (Variant *)&ret; Variant::CallError r_error; *ret_val = mb->call(o, args, p_arg_count, r_error); if (p_call_error) { p_call_error->error = (godot_variant_call_error_error)r_error.error; p_call_error->argument = r_error.argument; p_call_error->expected = (godot_variant_type)r_error.expected; } return ret; }