### Godot version

v4.1.beta

### System information

Windows 10

### Issue description

```
        virtual Ref<Script> get_script() const override {
                if (native_info->get_script_func) {
                        GDExtensionObjectPtr script = native_info->get_script_func(instance);
                        return Ref<Script>(reinterpret_cast<Script *>(script));
                }
                return Ref<Script>();
```
Is not creating a functional reference.

GDExtensionObjectPtr is a part of gdextension_interface and is a void pointer to pas data pointers between GDExtesion and Godot Core.

In the images below you are able to see that the extension `reinterpret_cast `works fine.
And that the pointer is passed to core.
However at core `Ref<Script> script_test` stays a NULL value

![image](https://github.com/godotengine/godot/assets/20573784/d4a955d3-4e02-46e2-abf1-ba88cf501e8f)
![image](https://github.com/godotengine/godot/assets/20573784/42a3fbb8-3598-479a-86bc-8b9464624885)
![image](https://github.com/godotengine/godot/assets/20573784/620782c0-192c-4e14-829c-5817ae680378)

I was hoping this would be solved by solving [cpp 1119](https://github.com/godotengine/godot-cpp/issues/1119)



### Steps to reproduce

Create a custom script instance and create it using `internal::gdextension_interface_script_instance_create` and a `GDExtensionScriptInstanceInfo` that only implements `get_property_list_func` and `get_script_func`.

### Minimal reproduction project

Difficult to create a minimal project.
Mostly looking for advice on what to test to find the actual source problem
ERR_CONTINUE(!op.has("insert_text"));
				option.insert_text = op["insert_text"];
				ERR_CONTINUE(!op.has("font_color"));
				option.font_color = op["font_color"];
				ERR_CONTINUE(!op.has("icon"));
				option.icon = op["icon"];
				ERR_CONTINUE(!op.has("default_value"));
				option.default_value = op["default_value"];
				ERR_CONTINUE(!op.has("location"));
				option.location = op["location"];
				if (op.has("matches")) {
					PackedInt32Array matches = op["matches"];
					ERR_CONTINUE(matches.size() & 1);
					for (int j = 0; j < matches.size(); j += 2) {
						option.matches.push_back(Pair<int, int>(matches[j], matches[j + 1]));
					}
				}
				r_options->push_back(option);
			}
		}
		ERR_FAIL_COND_V(!ret.has("force"), ERR_UNAVAILABLE);
		r_force = ret["force"];
		ERR_FAIL_COND_V(!ret.has("call_hint"), ERR_UNAVAILABLE);
		r_call_hint = ret["call_hint"];
		ERR_FAIL_COND_V(!ret.has("result"), ERR_UNAVAILABLE);
		Error result = Error(int(ret["result"]));
		return result;
	}
	GDVIRTUAL4RC(Dictionary, _lookup_code, const String &, const String &, const String &, Object *)
	virtual Error lookup_code(const String &p_code, const String &p_symbol, const String &p_path, Object *p_owner, LookupResult &r_result) override {