Есть одна очень забавная вещь (и имеет техническую значимость), которая может растратить ваши часы, поэтому подумал о ее совместном использовании -
Я создал проект консольного приложения ConsoleApplication1
и проект библиотеки классов ClassLibrary1
.
Весь код, который делал p / invoke, присутствовал в ClassLibrary1.dll
. Поэтому перед отладкой приложения из visual studio я просто скопировал неуправляемую сборку C ++ (myUnmanagedFunctions.dll
) в каталог \bin\debug\
проекта ClassLibrary1
, чтобы он мог быть загружен в среду выполнения CLR.
Я продолжал получать
Не удалось загрузить DLL
blockquote>в течение нескольких часов. Позже я понял, что все такие неуправляемые сборки, которые необходимо загрузить, необходимо скопировать в каталог
\bin\debug
стартового проектаConsoleApplication1
, который обычно представляет собой форму выигрыша, консольное или веб-приложение.Итак, будьте осторожны,
Current Directory
в принятом ответе на самом деле означаетCurrent Directory
основного исполняемого файла, с которого начинается процесс приложения. Похоже на очевидную вещь, но может быть и не так.Извлеченный урок - всегда помещайте неуправляемые DLL в том же каталоге, что и исполняемый файл запуска, чтобы убедиться, что его можно найти.