Как я могу ссылаться на 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.

Ответ 4

Чтобы основной проект был Any Cpu, вам нужно предоставить как 32-разрядную, так и 64-разрядную версию .dll - это должно быть возможно, поскольку вы строите его из источника.

Затем вам нужно предоставить исполняемому файлу манифест, указывающий его на правый verll verll в зависимости от платформы.