Как я могу ссылаться на 32-битную DLL в 64-битном проекте?
У меня есть проект С# 2.0, который настроен на целевое "Any Cpu", однако он ссылается на проект С++, который создает 32-разрядную dll.
Когда я пытаюсь запустить свою программу на 64-битной машине, я получаю следующую ошибку:
System.BadImageFormatException
был unhandled Сообщение: Не удалось загрузить файл или сборка TreeTMHook,
Version=1.0.2889.19619,
Culture=neutral, PublicKeyToken=null
или одной из его зависимостей. Попытка было сделано для загрузки программы с помощью неправильный формат.
Как я могу это исправить?
Обновление
Я хочу, чтобы основной проект был как любой процессор.
Спасибо.
Ответы
Ответ 1
Вам нужно будет построить ваш проект .NET как 32-разрядный (целевой объект x86), если вы хотите, чтобы он правильно загружал 32-разрядную DLL на 64-битную машину.
RE: Обновление:
Если вы хотите сохранить свой проект как "Любой процессор", вам понадобится 32-битная и 64-битная версия DLL и убедитесь, что соответствующая версия распространяется вместе с вашим приложением. Если вы не можете построить другой проект как 64-битный, вы должны создать свой проект .NET только как 32-разрядный.
Ответ 2
Вам придется принудительно запустить проект EXE в 32-битном режиме, чтобы он мог использовать эту С++ DLL. Project + Properties, вкладка Build, Platform Target = x86.
Ответ 3
Вы можете взглянуть на статью которая объясняет, почему это невозможно, короче, поскольку вы имеете дело с указателями, когда доступ к неуправляемому коду.
Ответ 4
Чтобы основной проект был Any Cpu
, вам нужно предоставить как 32-разрядную, так и 64-разрядную версию .dll - это должно быть возможно, поскольку вы строите его из источника.
Затем вам нужно предоставить исполняемому файлу манифест, указывающий его на правый verll verll в зависимости от платформы.