После нескольких часов работы Google, у меня нет решения этой проблемы.DllImport не находит DLL, размещенную в папке SysWOW64
Я разработал DLL в неуправляемом C++. Я поместил эту DLL в папку SysWOW64, так как это 64-разрядный компьютер.
С другой стороны, у меня есть приложение Winforms, разработанное на C#, которое импортирует функции, содержащиеся в DLL. Я использую DllImport («name.dll»), однако вызывается System.DllNotFoundException.
Все решение настроено для платформы x64.
Если я поместил DLL в исполняемый каталог, он будет работать.
Я хочу, чтобы DLL находилась в системной папке из-за простоты разработки. Я разрабатываю этот проект на двух разных компьютерах (настольном ПК и ноутбуке). ПК имеет 32-битную платформу, а ноутбук - 64 бита, с разными папками.
Чтобы синхронизировать проекты на обоих компьютерах, я использую репозиторий subversion. Я могу, очевидно, написать событие Post Build, чтобы скопировать DLL из папки проекта C++ в выходную папку основного исполняемого файла, но мне нужно будет изменить команду Post build при каждом переходе с ноутбука на ПК или наоборот.
Любая идея, почему DLL не найдена в системной папке? и что самое главное, есть ли способ его решения?
Благодаря Jaime
Если решение скомпилировано в x64, вы должны поместить dll в папку '% SystemRoot% \ System32'. '% SystemRoot% \ SysWOW64 \' используется 32-разрядными приложениями (x86) –
Когда я использую% SystemRoot% \ System32, система фактически копирует файл на SysWOW64 ... кажется, что внутренне, если система x64, система автоматически переводит System32 на SysWOW64, как своего рода псевдоним, возможно – jstuardo