From 8d89b9efb0ad30e3d4f8d3c1ebe2c59f3d77004a Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Sat, 11 May 2024 14:57:41 +0300 Subject: [PATCH 1/2] Fix internal type name for nested blittable element types --- Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs index 3f7dc1e3a..8001ffc9a 100644 --- a/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs +++ b/Source/Tools/Flax.Build/Bindings/BindingsGenerator.CSharp.cs @@ -1641,8 +1641,9 @@ namespace Flax.Build.Bindings if (internalType) { // Marshal blittable array elements back to original non-blittable elements - string originalElementTypeMarshaller = originalElementType + "Marshaller"; - string internalElementType = $"{originalElementTypeMarshaller}.{originalElementType}Internal"; + string originalElementTypeMarshaller = $"{originalElementType}Marshaller"; + string originalElementTypeName = originalElementType.Substring(originalElementType.LastIndexOf('.') + 1); // Strip namespace + string internalElementType = $"{originalElementTypeMarshaller}.{originalElementTypeName}Internal"; toManagedContent.AppendLine($"unmanaged.{fieldInfo.Name} != IntPtr.Zero ? NativeInterop.ConvertArray((Unsafe.As(ManagedHandle.FromIntPtr(unmanaged.{fieldInfo.Name}).Target)).ToSpan<{internalElementType}>(), {originalElementTypeMarshaller}.ToManaged) : null;"); toNativeContent.AppendLine($"managed.{fieldInfo.Name}?.Length > 0 ? ManagedHandle.ToIntPtr(ManagedArray.WrapNewArray(NativeInterop.ConvertArray(managed.{fieldInfo.Name}, {originalElementTypeMarshaller}.ToNative)), GCHandleType.Weak) : IntPtr.Zero;"); freeContents.AppendLine($"if (unmanaged.{fieldInfo.Name} != IntPtr.Zero) {{ ManagedHandle handle = ManagedHandle.FromIntPtr(unmanaged.{fieldInfo.Name}); Span<{internalElementType}> values = (Unsafe.As(handle.Target)).ToSpan<{internalElementType}>(); foreach (var value in values) {{ {originalElementTypeMarshaller}.Free(value); }} (Unsafe.As(handle.Target)).Free(); handle.Free(); }}"); From 77e29109ee5e07af4f91d6b315d1d132e4fe5e59 Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Sat, 11 May 2024 15:46:47 +0300 Subject: [PATCH 2/2] Fix native internal type name for deeply nested types --- Source/Tools/Flax.Build/Bindings/ApiTypeInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Tools/Flax.Build/Bindings/ApiTypeInfo.cs b/Source/Tools/Flax.Build/Bindings/ApiTypeInfo.cs index 14e2e136e..ee1004213 100644 --- a/Source/Tools/Flax.Build/Bindings/ApiTypeInfo.cs +++ b/Source/Tools/Flax.Build/Bindings/ApiTypeInfo.cs @@ -98,7 +98,7 @@ namespace Flax.Build.Bindings { var result = NativeName; if (Parent != null && !(Parent is FileInfo)) - result = Parent.FullNameNative + '_' + result; + result = Parent.FullNameNative.Replace("::", "_") + '_' + result; return result; } }