Singularity/Library/PackageCache/com.unity.burst@1.8.4/Documentation~/csharp-burst-intrinsics-dll...
2024-05-06 11:45:45 -07:00

1.6 KiB

DllImport and internal calls

To call native functions, use [DllImport]:

[DllImport("MyNativeLibrary")]
public static extern int Foo(int arg);

Burst also supports internal calls implemented inside Unity:

// In UnityEngine.Mathf
[MethodImpl(MethodImplOptions.InternalCall)]
public static extern int ClosestPowerOfTwo(int value);

DllImport is only supported for native plug-ins, not platform-dependent libraries like kernel32.dll.

For all DllImport and internal calls, you can only use the following types as parameter or return types:

Type Supported type
Built-in and intrinsic types byte / sbyte
short / ushort
int / uint
long / ulong
float
double
System.IntPtr / System.UIntPtr
Unity.Burst.Intrinsics.v64 / Unity.Burst.Intrinsics.v128 / Unity.Burst.Intrinsics.v256
Pointers and references sometype* : Pointer to any of the other types in this list
ref sometype : Reference to any of the other types in this list
Handle structs unsafe struct MyStruct { void* Ptr; } : Struct containing a single pointer field
unsafe struct MyStruct { int Value; } : Struct containing a single integer field

Note

Passing structs by value isn't supported; you need to pass them through a pointer or reference. The only exception is that handle structs are supported. These are structs that contain a single field of pointer or integer type.