Improve stability by fixing various crashes with dotnet7

This commit is contained in:
Wojtek Figat
2023-04-18 12:36:33 +02:00
parent 024dd74ae1
commit f046642ba7
8 changed files with 37 additions and 38 deletions

View File

@@ -561,17 +561,6 @@ namespace FlaxEngine.Interop
return ManagedString.ToNativeWeak(new string(text, 0, length));
}
/// <summary>
/// Creates a managed copy of the value, and stores it in a boxed reference.
/// </summary>
[UnmanagedCallersOnly]
internal static ManagedHandle BoxValue(ManagedHandle typeHandle, IntPtr valuePtr)
{
Type type = Unsafe.As<Type>(typeHandle.Target);
object value = MarshalToManaged(valuePtr, type);
return ManagedHandle.Alloc(value, GCHandleType.Weak);
}
[UnmanagedCallersOnly]
internal static ManagedHandle GetObjectType(ManagedHandle handle)
{
@@ -614,6 +603,17 @@ namespace FlaxEngine.Interop
return result;
}
/// <summary>
/// Creates a managed copy of the value, and stores it in a boxed reference.
/// </summary>
[UnmanagedCallersOnly]
internal static ManagedHandle BoxValue(ManagedHandle typeHandle, IntPtr valuePtr)
{
Type type = Unsafe.As<Type>(typeHandle.Target);
object value = MarshalToManaged(valuePtr, type);
return ManagedHandle.Alloc(value, GCHandleType.Weak);
}
/// <summary>
/// Returns the address of the boxed value type.
/// </summary>
@@ -1019,17 +1019,13 @@ namespace FlaxEngine.Interop
[UnmanagedCallersOnly]
internal static ManagedHandle NewGCHandle(ManagedHandle valueHandle, byte pinned)
{
object value = valueHandle.Target;
ManagedHandle handle = ManagedHandle.Alloc(value, pinned != 0 ? GCHandleType.Pinned : GCHandleType.Normal);
return handle;
return ManagedHandle.Alloc(valueHandle.Target, pinned != 0 ? GCHandleType.Pinned : GCHandleType.Normal);
}
[UnmanagedCallersOnly]
internal static ManagedHandle NewGCHandleWeak(ManagedHandle valueHandle, byte trackResurrection)
{
object value = valueHandle.Target;
ManagedHandle handle = ManagedHandle.Alloc(value, trackResurrection != 0 ? GCHandleType.WeakTrackResurrection : GCHandleType.Weak);
return handle;
return ManagedHandle.Alloc(valueHandle.Target, trackResurrection != 0 ? GCHandleType.WeakTrackResurrection : GCHandleType.Weak);
}
[UnmanagedCallersOnly]