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

У меня есть проект C # 2.0, который настроен на «Any Cpu», однако он ссылается на проект C ++, который создает 32-битную DLL.

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

System.BadImageFormatException не обработан. Сообщение: Не удалось загрузить файл или сборку TreeTMHook, Version=1.0.2889.19619, Culture=neutral, PublicKeyToken=null или одну из ее зависимостей.Была предпринята попытка загрузить программу с неверным форматом.

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

Обновление

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

Спасибо.

Ответы [ 4 ]

14 голосов
/ 25 августа 2010

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

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

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

4 голосов
/ 25 августа 2010

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

1 голос
/ 25 августа 2010

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

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

1 голос
/ 25 августа 2010

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

...