2015-05-05 2 views
-3

После нескольких часов работы 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

+1

Если решение скомпилировано в x64, вы должны поместить dll в папку '% SystemRoot% \ System32'. '% SystemRoot% \ SysWOW64 \' используется 32-разрядными приложениями (x86) –

+0

Когда я использую% SystemRoot% \ System32, система фактически копирует файл на SysWOW64 ... кажется, что внутренне, если система x64, система автоматически переводит System32 на SysWOW64, как своего рода псевдоним, возможно – jstuardo

ответ

4

Весь раствор сконфигурирован для платформы x64.

SysWOW64 - фактически 32-разрядный системный каталог. Для 32-разрядной программы перенаправитель файловой системы перенаправляет system32 на SysWOW64.

  • Для 32-разрядного процесса системный каталог SysWOW64.
  • Для 64-разрядного процесса системный каталог system32.

Это объясняет возникшую проблему.

Для чего вы действительно не должны изменять системный каталог. Он принадлежит системе, и приложения не должны изменять его.

Смежные вопросы