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/sbyteshort/ushortint/uintlong/ulongfloatdoubleSystem.IntPtr/System.UIntPtrUnity.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 つ含む構造体です。