DllImport と内部呼び出し
ネイティブ関数を呼び出すには、以下のように [DllImport]
を使用します。
[DllImport("MyNativeLibrary")]
public static extern int Foo(int arg);
Burst は、Unity 内に実装されている内部呼び出しもサポートしています。
// UnityEngine.Mathf 内
[MethodImpl(MethodImplOptions.InternalCall)]
public static extern int ClosestPowerOfTwo(int value);
DllImport
が対応しているのは ネイティブプラグイン だけであり、kernel32.dll
などのプラットフォーム依存ライブラリには対応していません。
すべての DllImport
と内部呼び出しで、パラメーターまたは戻り値の型として使用できるのは以下の型のみです。
型 | サポートされている型 |
---|---|
ビルトイン型および intrinsic の型 | 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 |
ポインターと参照 | sometype* : このリストに記載の他の型へのポインターref sometype : このリストに記載の他の型への参照 |
ハンドル構造体 | unsafe struct MyStruct { void* Ptr; } : ポインターフィールドを 1 つ含む構造体unsafe struct MyStruct { int Value; } : 整数フィールドを 1 つ含む構造体 |
Note
構造体の値渡しはサポートされていません。構造体はポインターまたは参照を通じて渡す必要があります。唯一の例外としてサポートされているのは、ハンドル構造体です。ハンドル構造体は、ポインターまたは整数型のフィールドを 1 つ含む構造体です。