HellFingers
@HellFingers

Не подключается DLL C++ к Unity?

Добрый вечер, есть работающая dll x86. Для проекта необходимо ее импортировать в Unity и вызывать из dll функцию при нажатии кнопки. Код:
using System.Runtime.InteropServices;
using System.Text;
using UnityEngine;
using UnityEngine.UI;
using System.Runtime.InteropServices;
public class ButtonPressed : MonoBehaviour
{
    public InputField testField;
    public Dropdown testDrop;
    public Toggle testToggle;
    [DllImport("C:\\Users\\path_to_Assets\\Assets\\Plugins\\DLL2.dll", EntryPoint = "?Summ@@YAHHH@Z")]
    public static extern int Summ(int first, int second);
    public void Press()
    {
        Debug.Log(Summ(5, 2));
    }
}

dll помещена в папку Plugins. После нажатия на кнопку выкидывает ошибку DllNotFoundException. Заранее благодарен
  • Вопрос задан
  • 531 просмотр
Пригласить эксперта
Ответы на вопрос 1
50Dreams
@50Dreams
Во-первых, если библиотека скомпилирована под 64х разрядную архитектуру, то она должна быть расположена в папке "x64" (Assets -> Plugins -> x64 -> mylib.dll).
Во-вторых, не указывайте полный путь! Когда вы сделаете билд игра не сможет найти ваши dll!!! В DllImport просто укажите название вашей библиотеки без расширения (т.е. без ".dll").
В-третьих, посмотрите указание на то, что функция экспортируется из DLL.
__declspec(dllexport)
В-четвертых, как было сказано freeExec, можно использовать extern "C" перед определением функции, тогда в DllImport -> EntryPoint можно передать название функции ;)
В-пятых, проверьте настройки импорта вашей библиотеки и поставьте необходимые флажки в Include Platforms: 5e059ea2a4b4e178359877.png
Надеюсь, всё понятно изъяснил, удачи вам ;)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы