Я хочу использовать код C ++ в приложении C #, поэтому я написал DLL на C ++.
Поскольку я впервые создаю C ++ DLL, я начал с создания ‘test’ dll. Вот код
extern "C"{
__declspec(dllexport) void DisplayHelloFromDLL()
{
printf("Hello from DLL !\n");
}
}
Чем я сделал очень простое приложение на C #:
class DllTest {
[DllImport("Test.dll")]
public static extern void DisplayHelloFromDLL();
public static void UseDll() {
DisplayHelloFromDLL();
}
}
После этого я собрал оба приложения и переместил исполняемый файл и dll в одну папку. Но когда я запустил исполняемый файл, он показал следующее сообщение:
Необработанное исключение: System.DllNotFoundException: Невозможно загрузить DLL «Test.dll»: указанный модуль не найден
вам нужно хранить DLL в папке отладки.
и попробуйте эту команду, чтобы проверить, что метод экспортируется правильно
dumpbin /exports Test.dll
Вы должны проверить целевую платформу как DLL, так и EXE.
Редактировать: Когда цели отличаются, исключение BadImageFormatException
У вас будет DllNotFoundException когда длл или одна из его зависимостей не найден.
Например, когда вы компилируете отладочную версию DLL с помощью VisualStudio, ей требуются среды отладки (которые не установлены на машине без IDE).
Вы можете проверить свои зависимости DLL, используя Зависимость Уокер
Этот инструмент также поможет вам увидеть целевую систему (x86 / x64) и экспортированные функции (используйте ее на dll, программа не покажет вам зависимости [DllImport])