Подключение в Unity3D (С#) неуправляемой библиотеки

132
22 июня 2019, 22:20

Пытаюсь в приложении на C# Unity3D вызвать функции из неуправляемой библиотеки. Добавил ее в Assets, со следующими настройками

В коде объявляю их с помощью PInvoke, вроде

[DllImport("avcodec-58.dll"), SuppressUnmanagedCodeSecurity]
public static extern int avcodec_close(AVCodecContext pAVCodecContext);

Но при обращении к ним выдается ошибка "DllNotFoundException: avcodec-58.dll". Подскажите, пожалуйста, как правильно подключить?

Сделал так:

[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true, CallingConvention = CallingConvention.FastCall)]     
[ResourceExposure(ResourceScope.Process)]
public static extern IntPtr LoadLibrary(string libFilename);
public NativeMethods()
{
    IntPtr lib = LoadLibrary("Полный путь к avcodec-58.dll");
    if (lib == IntPtr.Zero)
        throw new Win32Exception(Marshal.GetLastWin32Error());
}

Но при вызове LoadLibrary все равно выдает ошибку "Не найден указанный модуль".

Answer 1

игрушка компилируется конкретно Юнити. Не вижуалкою и не MonoDevelop. Это значит что все что нужно для подключения внешней DLL — просто поместить в Assets папку. Дальше юнити синхронизирует эти изменения с проектом — добавит нужные референсы на библиотеку в проект.

Нужно иметь в виду, что сама DLL должна быть скомпилирована под .NET 3.5 или ниже т.к. юнити работает именно с 3.5.

Так же есть оф. документация по теме: https://docs.unity3d.com/Manual/Plugins.html

READ ALSO
Как правильно преобразовать JSON в модель?

Как правильно преобразовать JSON в модель?

Делаю запрос к API в формате JSON, необходимо преобразовать его в модель C#

138
Как заменить содержимое Frame

Как заменить содержимое Frame

Есть окно "MainWindow", в нем Frame "Go" в который при запуске окна помещается "Page1", в "Page1" еще один Frame "Main", в котором лежит "Page2"

123
BitmapImage не работает с Binding?

BitmapImage не работает с Binding?

Интересная ситуация, при попытке установки значения для BitmapImageUriSource через привязку данных, вот так:

127