2010-08-25 2 views
14

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

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

System.BadImageFormatException was unhandled Message: Could not load file or assembly TreeTMHook, Version=1.0.2889.19619, Culture=neutral, PublicKeyToken=null or one of its dependencies. An attempt was made to load a program with an incorrect format.

Как я могу это исправить?

Update

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

Спасибо.

+0

Имейте в виду, что означает «Любой процессор». ** Вы ** утверждаете, что основной проект работает повсюду, это означает, что ** вы ** несете ответственность за устранение всех зависимостей архитектуры. – MSalters

ответ

13

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

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

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

4

Вам придется принудительно запустить проект EXE в 32-битном режиме, чтобы он мог использовать эту C++ DLL. Project + Properties, вкладка Build, Platform Target = x86.

1

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

1

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

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

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