From 0083ebd8871b45a3a5053f6f0258d6ed2396c7ba Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 19 Sep 2023 09:32:37 +0200 Subject: [PATCH] Fix missing C# static fields in native scripting api --- Source/Engine/Engine/NativeInterop.Unmanaged.cs | 6 +++--- Source/Engine/Scripting/Runtime/DotNet.cpp | 3 --- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/Source/Engine/Engine/NativeInterop.Unmanaged.cs b/Source/Engine/Engine/NativeInterop.Unmanaged.cs index e96839546..670b7fff5 100644 --- a/Source/Engine/Engine/NativeInterop.Unmanaged.cs +++ b/Source/Engine/Engine/NativeInterop.Unmanaged.cs @@ -297,7 +297,7 @@ namespace FlaxEngine.Interop internal static void GetClassFields(ManagedHandle typeHandle, NativeFieldDefinitions** classFields, int* classFieldsCount) { Type type = Unsafe.As(typeHandle.Target); - var fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + var fields = type.GetFields(BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); NativeFieldDefinitions* arr = (NativeFieldDefinitions*)NativeAlloc(fields.Length, Unsafe.SizeOf()); for (int i = 0; i < fields.Length; i++) @@ -331,7 +331,7 @@ namespace FlaxEngine.Interop internal static void GetClassProperties(ManagedHandle typeHandle, NativePropertyDefinitions** classProperties, int* classPropertiesCount) { Type type = Unsafe.As(typeHandle.Target); - var properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + var properties = type.GetProperties(BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); var arr = (NativePropertyDefinitions*)NativeAlloc(properties.Length, Unsafe.SizeOf()); for (int i = 0; i < properties.Length; i++) @@ -804,8 +804,8 @@ namespace FlaxEngine.Interop [UnmanagedCallersOnly] internal static IntPtr FieldGetValueBoxed(ManagedHandle fieldOwnerHandle, ManagedHandle fieldHandle) { - object fieldOwner = fieldOwnerHandle.Target; FieldHolder field = Unsafe.As(fieldHandle.Target); + object fieldOwner = field.field.IsStatic ? null : fieldOwnerHandle.Target; object fieldValue = field.field.GetValue(fieldOwner); return Invoker.MarshalReturnValueGeneric(field.field.FieldType, fieldValue); } diff --git a/Source/Engine/Scripting/Runtime/DotNet.cpp b/Source/Engine/Scripting/Runtime/DotNet.cpp index 8c87a5748..2157e8dff 100644 --- a/Source/Engine/Scripting/Runtime/DotNet.cpp +++ b/Source/Engine/Scripting/Runtime/DotNet.cpp @@ -905,7 +905,6 @@ const Array& MClass::GetMethods() const NativeMethodDefinitions& definition = methods[i]; MMethod* method = New(const_cast(this), StringAnsi(definition.name), definition.handle, definition.numParameters, definition.methodAttributes); _methods.Add(method); - MCore::GC::FreeMemory((void*)definition.name); } MCore::GC::FreeMemory(methods); @@ -939,7 +938,6 @@ const Array& MClass::GetFields() const NativeFieldDefinitions& definition = fields[i]; MField* field = New(const_cast(this), definition.fieldHandle, definition.name, definition.fieldType, definition.fieldAttributes); _fields.Add(field); - MCore::GC::FreeMemory((void*)definition.name); } MCore::GC::FreeMemory(fields); @@ -984,7 +982,6 @@ const Array& MClass::GetProperties() const const NativePropertyDefinitions& definition = foundProperties[i]; MProperty* property = New(const_cast(this), definition.name, definition.getterHandle, definition.setterHandle, definition.getterAttributes, definition.setterAttributes); _properties.Add(property); - MCore::GC::FreeMemory((void*)definition.name); } MCore::GC::FreeMemory(foundProperties);