1.7 KiB
1.7 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 / sbyteshort / ushortint / uintlong / ulongfloatdoubleSystem.IntPtr / System.UIntPtrUnity.Burst.Intrinsics.v64 / Unity.Burst.Intrinsics.v128 / Unity.Burst.Intrinsics.v256 |
| Pointers and references | sometype* : Pointer to any of the other types in this listref sometype : Reference to any of the other types in this list |
| Handle structs | unsafe struct MyStruct { void* Ptr; } : Struct containing a single pointer fieldunsafe 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.