Атрибут DllImport
Используйте DllImportAttribute, чтобы определить, где время выполнения скрипта может найти неуправляемую функцию. Для динамически загружаемых библиотек, которые загружаются во время выполнения, используйте в атрибуте имя файла библиотеки. Если вы пропустите расширение файла и префикс “lib”, используемый на платформах POSIX, библиотека загружается в соответствии с соглашениями платформы:
Windows: добавить расширение файла
.dll. Например, загрузить “MyLibraryName” как “MyLibraryName.dll”.-
POSIX (macOS, iOS, Android, и т.д.): добавьте общие расширения файлов (
.so,.dll,.dylib,.bundle) и попробуйте с префиксом lib и без него. Например, загрузите “MyLibraryName” как:- MyLibraryName.bundle, libMyLibraryName.bundle
- MyLibraryName.dll, libMyLibraryName.dll
- MyLibraryName.dylib, libMyLibraryName.dylib
- MyLibraryName.so, libMyLibraryName.so
Эта схема позволяет вам указать имя базовой библиотеки в DllImportAttribute и успешно загрузить библиотеку на нескольких платформах. Вы также можете указать точное имя файла с расширением.
Следующий пример работает на разных платформах (предположим, что вы добавили необходимые файлы библиотек для каждой платформы в ваш проект Unity):
[DllImport("SimpleMath")]
static extern float AddTwoFloats(float f1, float f2);
Нижеследующее работает только на macOS и мобильных платформах Apple, так как оно явно указывает файл .bundle:
[DllImport("libStringUtilities.bundle")]
static extern void SendStringArray([In] string[] strings, int length);
Для статически связанных библиотек и плагинов исходного кода используйте строку __Internal (с двумя начинающимися символами подчеркивания) для значения DllImportAttribute:
[DllImport("__Internal")]
static extern int AddTwoIntegers(int i1, int i2);
Примечания:
- Статическое связывание предварительно скомпилированных библиотек Unity поддерживает только на Android и мобильных платформах Apple.
- Unity поддерживает плагины исходного кода только при использовании IL2CPP скриптового бэкенда.