# 将 IL2CPP 与 macOS 结合使用

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

描述了在利用“中间语言转 C++” 技术（路径为./scripting-backends-il2cpp）的 macOS 应用程序中，插件的使用方法。

IL2CPP 是一种完全受支持的脚本后端，可在为 macOS 播放器构建项目时替代 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++ 文件在检视面板中起到插件的作用。如果将 C++ 文件配置为与 macOS 播放器兼容，则 Unity 会将这些文件与从托管程序集生成的 C++ 代码一起编译。请参阅[导入和配置插件](/engine/6000.0/manual/scripting/compilation-and-code-reload/plug-ins/plug-in-inspector.md)以了解有关插件配置的更多信息。

生成的 C++ 代码将函数链接在一起，因此不需要单独的动态链接库 (DLL)。不使用 DLL 名称，而是借助 `"__Internal"` 关键字让 C++ 链接器负责解析函数，而不是在运行时加载函数。例如：

```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)
