Подтвердить что ты не робот

64-разрядная версия COM-взаимодействия Visual Studio 2010

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

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

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

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

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

ИЗМЕНИТЬ:

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

Мне нужно сделать Interop вручную, чтобы заставить это работать.

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

4b9b3361

Ответ 1

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

<PlatformTarget>AnyCPU</PlatformTarget>

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