Проблема с 64-разрядным COM-взаимодействием Visual Studio 2010
-
20-09-2019 - |
Вопрос
Я пытаюсь добавить библиотеку DLL VC6 COM в наше решение VS2010RC на C #.Библиотека DLL была скомпилирована с помощью инструментов VC6 для создания версии x86 и была скомпилирована с помощью кроссплатформенных инструментов VC7 для создания библиотеки DLL VC7.
Версия сборки для x86 работает нормально, пока платформа используемого проекта C # установлена на x86.Не имеет значения, действительно ли зарегистрирована версия DLL для 64 или x86.Это работает и с тем, и с другим.Если платформа настроена на "Любой процессор", я получаю BadImageFormatException
о нагрузке на Interop.<name>.dll
.
Что касается версии x64, я даже не могу запустить проект в сборку.Я получаю сообщение об ошибке tlbimp:
TlbImp :ошибка TI0000:Необходимо указать единственный допустимый тип компьютера, совместимый с библиотекой входных типов .
Кто-нибудь видел эту проблему?
Редактировать:
Я еще больше углубился в эту проблему и думаю, что это может быть ошибка Visual Studio.У меня есть чистое решение.Я ввожу свою COM-сборку с выбранным не зависящим от языка "Любым процессором".Архитектура процесса результирующей библиотеки DLL взаимодействия является x86, а не MSIL.
Возможно, сейчас придется выполнить взаимодействие вручную, чтобы заставить это работать.
Если у кого-нибудь есть другое предложение, дайте мне знать.
Решение
Эту проблему можно решить, открыв файл CSProj и добавив следующий узел к любому из узлов "(Конфигурация) | Любой процессор", на которых он отсутствует:
<PlatformTarget>AnyCPU</PlatformTarget>
Если этот узел отсутствует, TlbImp по умолчанию будет иметь значение x86 и вызовет проблемы.