Unity 6.3
0 онлайн 95 гостей 3 в системе
Вход
Программирование в Unity Шаг 106 из 210

Атрибут 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 скриптового бэкенда.