Как ссылаться на 32-битную DLL в 64-битном проекте?

У меня есть проект C # 2.0, который настроен на «Any Cpu», однако он ссылается на проект C ++, который строит 32 bit dll.

Когда я пытаюсь запустить мою программу на 64-битной машине, я получаю следующую ошибку:

System.BadImageFormatException был необработанное сообщение: не удалось загрузить файл или сборка TreeTMHook, Version = 1.0.2889.19619, Культура = нейтральная, PublicKeyToken = ноль или одна из его зависимостей. Попытка был сделан, чтобы загрузить программу с неверный формат.

Как это исправить?

Обновление

Я хочу сохранить основной проект как любой процессор.

Спасибо.

15
задан JoeG 25 August 2010 в 12:24
поделиться

4 ответа

Вам потребуется создать проект .NET как 32-разрядный (цель x86), если вы хотите, чтобы он корректно загружал 32-разрядную DLL на 64-разрядную машину.

RE: Обновление:

Если вы хотите сохранить свой проект как «Любой процессор», вам потребуются 32-битная и 64-битная версии DLL, и убедитесь, что соответствующая версия распространяется вместе с вашим приложением. Если вы не можете собрать другой проект как 64-разрядный, вы должны собрать свой проект .NET только как 32-разрядный.

14
ответ дан 1 December 2019 в 03:42
поделиться

Вам нужно будет принудительно запустить свой EXE-проект в 32-битном режиме, чтобы он мог использовать эту C ++ DLL. Проект + Свойства, вкладка Сборка, Целевая платформа = x86.

4
ответ дан 1 December 2019 в 03:42
поделиться

Возможно, вы захотите взглянуть на эту статью , в которой объясняется, почему это невозможно, короче говоря, поскольку вы имеете дело с указателями при доступе к неуправляемому коду.

1
ответ дан 1 December 2019 в 03:42
поделиться

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

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

1
ответ дан 1 December 2019 в 03:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: