64-разрядная проблема взаимодействия с COM в Visual Studio 2010 - PullRequest
16 голосов
/ 16 марта 2010

Я пытаюсь добавить COM DLL VC6 в наше решение VS2010RC C #. DLL была скомпилирована с помощью инструментов VC6 для создания версии x86 и скомпилирована с помощью кроссплатформенных инструментов VC7 для создания DLL VC7.

Версия сборки x86 работает нормально, если платформа потребляющего C # проекта установлена ​​на x86. Не имеет значения, зарегистрирована ли на самом деле версия DLL для x64 или x86. Это работает с обоими. Если для платформы установлено значение «Любой процессор», я получаю BadImageFormatException при загрузке Interop.<name>.dll.

Что касается версии x64, я даже не могу заставить проект собираться. Я получаю ошибку tlbimp:

TlbImp: ошибка TI0000: один действительный тип машины, совместимый с библиотека типов ввода должна быть указана.

Кто-нибудь видел эту проблему?

РЕДАКТИРОВАТЬ:

Я гораздо больше разбираюсь в этой проблеме и думаю, что это может быть ошибка Visual Studio. У меня есть чистое решение. Я ввожу свою сборку COM с выбранным языком, не зависящим от языка «Любой процессор». Архитектура процесса получившейся Interop DLL - x86, а не MSIL.

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

Если у кого-то есть другое предложение, дайте мне знать.

1 Ответ

47 голосов
/ 16 марта 2010

Эту проблему можно решить, открыв файл CSProj и добавив следующий узел к любому из узлов «(Конфигурация) | Любой ЦП», в которых он отсутствует:

<PlatformTarget>AnyCPU</PlatformTarget>

Если этот узел отсутствует, TlbImp по умолчанию будет использовать x86 и вызывать проблемы.

...