Я пытаюсь импортировать в C ++ Project Dll в проект C #. Я обнаружил, что многие люди говорят об использовании DllImport. Я попытался использовать это, и вот что у меня есть
Код CPP:
int __declspec(dllexport) beginCode(double reportId);
Код C #:
[DllImport("C:\\Users\\<my_user_id>\\Desktop\\ctxmix\\Release\\ctxmix.dll",CallingConvention =CallingConvention.Cdecl ,CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
public static extern int beginCode(double reportId);
int result = beginCode(reportId);
Но когда я запускаю, я получаю исключение — выдается исключение: ‘System.DllNotFoundException’
Должен ли я добавить какие-либо ссылки на CPP Dll в проекте или сделать что-то еще, кроме кода, который у меня есть вверху?
Изменить: я пытаюсь запустить мой .exe с использованием VS2015, и я получаю это исключение на моем локальном компьютере. Кроме того, я не вижу свою CPP Dll в разделе Project-> References, где, как я вижу другие ссылки там.
Неуправляемая DLL должна быть доступна для вашего управляемого процесса. Как правило, это означает размещение DLL в том же каталоге, что и исполняемый файл. Но вы дали использовать абсолютный путь, который, я полагаю, вы расшифровали правильно.
Вы также можете столкнуться с этой ошибкой, если не удается найти зависимости DLL. Это кажется вероятным объяснением здесь. Скорее всего, среда выполнения MSVC не может быть найдена, когда ваша DLL загружена.
Использование абсолютного пути не очень хорошая идея. Это сломается, когда вы распространите на другую машину. Используйте только имя файла DLL и поместите его в тот же каталог, что и исполняемый файл.
Ваш атрибут DllImport кажется суетливым. Нет смысла указывать CharSet при отсутствии текста. Я сомневаюсь, что ваша функция вызывает SetLastError. И вам действительно нужен ExactSpelling?
Других решений пока нет …