Merge branch 'object_array_marshalling' of https://github.com/GoaLitiuM/FlaxEngine into GoaLitiuM-object_array_marshalling
This commit is contained in:
@@ -18,6 +18,8 @@ namespace FlaxEngine.Interop
|
||||
/// </summary>
|
||||
internal static class Invoker
|
||||
{
|
||||
// TODO: Use .NET8 Unsafe.BitCast<TRet, ValueType>(returnValue) for more efficient casting of value types over boxing cast
|
||||
|
||||
internal static IntPtr MarshalReturnValue<TRet>(ref TRet returnValue)
|
||||
{
|
||||
if (returnValue == null)
|
||||
|
||||
@@ -141,7 +141,7 @@ namespace FlaxEngine.Interop
|
||||
|
||||
public static class ManagedToNative
|
||||
{
|
||||
public static IntPtr ConvertToUnmanaged(FlaxEngine.Object managed) => (object)managed != null ? ManagedHandle.ToIntPtr(managed) : IntPtr.Zero;
|
||||
public static IntPtr ConvertToUnmanaged(FlaxEngine.Object managed) => Unsafe.As<object>(managed) != null ? ManagedHandle.ToIntPtr(managed) : IntPtr.Zero;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -770,12 +770,20 @@ namespace FlaxEngine.Interop
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
internal static void SetArrayValueReference(ManagedHandle arrayHandle, IntPtr valueHandle, int index)
|
||||
internal static void WriteArrayReference(ManagedHandle arrayHandle, IntPtr valueHandle, int index)
|
||||
{
|
||||
ManagedArray managedArray = Unsafe.As<ManagedArray>(arrayHandle.Target);
|
||||
managedArray.ToSpan<IntPtr>()[index] = valueHandle;
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
internal static void WriteArrayReferences(ManagedHandle arrayHandle, IntPtr spanPtr, int spanLength)
|
||||
{
|
||||
ManagedArray managedArray = Unsafe.As<ManagedArray>(arrayHandle.Target);
|
||||
var unmanagedSpan = new Span<IntPtr>(spanPtr.ToPointer(), spanLength);
|
||||
unmanagedSpan.CopyTo(managedArray.ToSpan<IntPtr>());
|
||||
}
|
||||
|
||||
[UnmanagedCallersOnly]
|
||||
internal static ManagedHandle LoadAssemblyImage(IntPtr assemblyPathPtr, IntPtr* assemblyName, IntPtr* assemblyFullName)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user