mirror of
https://github.com/godotengine/godot.git
synced 2025-12-08 06:09:55 +00:00
Add GDNativeInterface::get_library_path to GDExtension
This commit is contained in:
parent
574bf0b91b
commit
80f61352fb
19 changed files with 65 additions and 17 deletions
|
|
@ -1069,4 +1069,6 @@ void gdnative_setup_interface(GDNativeInterface *p_interface) {
|
|||
gdni.classdb_register_extension_class_property_subgroup = nullptr;
|
||||
gdni.classdb_register_extension_class_signal = nullptr;
|
||||
gdni.classdb_unregister_extension_class = nullptr;
|
||||
|
||||
gdni.get_library_path = nullptr;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -545,6 +545,9 @@ typedef struct {
|
|||
void (*classdb_register_extension_class_property_subgroup)(const GDNativeExtensionClassLibraryPtr p_library, const char *p_class_name, const char *p_subgroup_name, const char *p_prefix);
|
||||
void (*classdb_register_extension_class_signal)(const GDNativeExtensionClassLibraryPtr p_library, const char *p_class_name, const char *p_signal_name, const GDNativePropertyInfo *p_argument_info, GDNativeInt p_argument_count);
|
||||
void (*classdb_unregister_extension_class)(const GDNativeExtensionClassLibraryPtr p_library, const char *p_class_name); /* Unregistering a parent class before a class that inherits it will result in failure. Inheritors must be unregistered first. */
|
||||
|
||||
void (*get_library_path)(const GDNativeExtensionClassLibraryPtr p_library, GDNativeStringPtr r_path);
|
||||
|
||||
} GDNativeInterface;
|
||||
|
||||
/* INITIALIZATION */
|
||||
|
|
|
|||
|
|
@ -261,8 +261,14 @@ void NativeExtension::_unregister_extension_class(const GDNativeExtensionClassLi
|
|||
self->extension_classes.erase(class_name);
|
||||
}
|
||||
|
||||
void NativeExtension::_get_library_path(const GDNativeExtensionClassLibraryPtr p_library, GDNativeStringPtr r_path) {
|
||||
NativeExtension *self = static_cast<NativeExtension *>(p_library);
|
||||
|
||||
*(String *)r_path = self->library_path;
|
||||
}
|
||||
|
||||
Error NativeExtension::open_library(const String &p_path, const String &p_entry_symbol) {
|
||||
Error err = OS::get_singleton()->open_dynamic_library(p_path, library, true);
|
||||
Error err = OS::get_singleton()->open_dynamic_library(p_path, library, true, &library_path);
|
||||
if (err != OK) {
|
||||
return err;
|
||||
}
|
||||
|
|
@ -354,6 +360,7 @@ void NativeExtension::initialize_native_extensions() {
|
|||
gdnative_interface.classdb_register_extension_class_property_subgroup = _register_extension_class_property_subgroup;
|
||||
gdnative_interface.classdb_register_extension_class_signal = _register_extension_class_signal;
|
||||
gdnative_interface.classdb_unregister_extension_class = _unregister_extension_class;
|
||||
gdnative_interface.get_library_path = _get_library_path;
|
||||
}
|
||||
|
||||
RES NativeExtensionResourceLoader::load(const String &p_path, const String &p_original_path, Error *r_error, bool p_use_sub_threads, float *r_progress, CacheMode p_cache_mode) {
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ class NativeExtension : public Resource {
|
|||
GDCLASS(NativeExtension, Resource)
|
||||
|
||||
void *library = nullptr; // pointer if valid,
|
||||
String library_path;
|
||||
|
||||
struct Extension {
|
||||
ObjectNativeExtension native_extension;
|
||||
|
|
@ -54,6 +55,7 @@ class NativeExtension : public Resource {
|
|||
static void _register_extension_class_property_subgroup(const GDNativeExtensionClassLibraryPtr p_library, const char *p_class_name, const char *p_subgroup_name, const char *p_prefix);
|
||||
static void _register_extension_class_signal(const GDNativeExtensionClassLibraryPtr p_library, const char *p_class_name, const char *p_signal_name, const GDNativePropertyInfo *p_argument_info, GDNativeInt p_argument_count);
|
||||
static void _unregister_extension_class(const GDNativeExtensionClassLibraryPtr p_library, const char *p_class_name);
|
||||
static void _get_library_path(const GDNativeExtensionClassLibraryPtr p_library, GDNativeStringPtr r_path);
|
||||
|
||||
GDNativeInitialization initialization;
|
||||
int32_t level_initialized = -1;
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ public:
|
|||
|
||||
virtual void alert(const String &p_alert, const String &p_title = "ALERT!");
|
||||
|
||||
virtual Error open_dynamic_library(const String p_path, void *&p_library_handle, bool p_also_set_library_path = false) { return ERR_UNAVAILABLE; }
|
||||
virtual Error open_dynamic_library(const String p_path, void *&p_library_handle, bool p_also_set_library_path = false, String *r_resolved_path = nullptr) { return ERR_UNAVAILABLE; }
|
||||
virtual Error close_dynamic_library(void *p_library_handle) { return ERR_UNAVAILABLE; }
|
||||
virtual Error get_dynamic_library_symbol_handle(void *p_library_handle, const String p_name, void *&p_symbol_handle, bool p_optional = false) { return ERR_UNAVAILABLE; }
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue