# macOS での IL2CPP の使用

> Describes the use of plug-ins for macOS applications using IL2CPP.

IL2CPP (Intermediate Language To C++) (./scripting-backends-il2cpp) を使用する macOS アプリケーションのプラグインの使用について説明します。

IL2CPP は完全にサポートされたスクリプティングバックエンドで、macOS Player のプロジェクトをビルドする場合にMono の代わりに使用できます。

IL2CPP を使用してプロジェクトをビルドする場合、Unity はネイティブのバイナリを作成する前に、中間言語 (IL) コードをスクリプトやアセンブリから C++ に変換します。詳細は [IL2CPP](/engine/6000.0/manual/scripting/compilation-and-code-reload/backends/il2cpp.md) を参照してください。

## IL2CPP 用の C++ ソースコードプラグイン##c++-source-code-plug-ins-for-il2cpp

[IL2CPP](/engine/6000.0/manual/scripting/compilation-and-code-reload/backends/il2cpp.md) スクリプティングバックエンドを使用するときに、C++ (.cpp) コードファイルを直接 Unity プロジェクトに加えることができます。これらの C++ ファイルは、Inspector 内でプラグインとして機能します。C++ ファイルを macOS Player と互換性を持つように設定すると、Unity はマネージアセンブリから生成された C++ コードとともにそれらをコンパイルします。プラグインの設定の詳細については、[プラグインのインポートと設定](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/plug-in-inspector.md) を参照してください。

生成された C++ コードには関数がまとめてリンクされるので、別の動的リンクライブラリ (DLL) は不要になります。DLL 名を使用する代わりに、`"__Internal"` キーワードを使用すると、ランタイムに関数をロードするのではなく、リンカーが関数を解決します。 例:

```lang-cpp
[DllImport("__Internal")]
private static extern int
CountLettersInString([MarshalAs(UnmanagedType.LPWStr)]string str);
```

このような関数を NativeFunctions.cpp で以下のように定義することができます。

```lang-cpp
extern "C" __declspec(dllexport) int __stdcall CountLettersInString(wchar_t* str)
{
    int length = 0;
    while (*str++ != nullptr)
        length++;
    return length;
}
```

リンカーが関数呼び出しを解決する際に、マネージ側の関数宣言のエラーは、ランタイムエラーではなくリンカーエラーになります。つまり、C# から直接呼び出される関数を、ランタイムに動的にロードする必要がなくなります。これにより、`P/Invoke` 呼び出しのパフォーマンスオーバーヘッドが削減されます。

## 追加リソース##additional-resources

* [プラグインのインポートと設定](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/plug-in-inspector.md)
