Лучший способ доступа к COM-объектам из С#

Я планирую использовать различные объекты, представленные как COM-объекты. Чтобы упростить их использование, я хотел бы обернуть их как объекты C#. Каков наилучший подход для этого?


person Tony the Pony    schedule 11.03.2009    source источник
comment
Мэдс Торгерсен, менеджер языковых продуктов для C#, сказал в последнем подкасте DeepFriedBytes о C#, что они добавили или добавляют определенные функции для облегчения взаимодействия с COM. Если бы я только мог вспомнить, что это было...   -  person f3lix    schedule 11.03.2009
comment
Я думаю, вы имеете в виду «динамический» тип переменной, появившийся в С# 4.0. Это новое ключевое слово упрощает задачу, но в C# это уже возможно.   -  person Robert P    schedule 12.03.2009


Ответы (2)


Если библиотека уже зарегистрирована, вы можете выполнить следующие действия, чтобы Visual Studio сгенерировала для вас сборку взаимодействия:

  • Откройте для своего проекта Visual Studio.
  • Щелкните правой кнопкой мыши «Ссылки» (прямо под проектом в обозревателе решений) и выберите «Добавить ссылку».
  • Выберите вкладку COM. (Если вы этого не видите, ваш тип проекта не поддерживает COM.)
  • Выберите компонент, с которым вы хотите взаимодействовать.
  • Выберите «ОК».

Это будет класс или набор классов C#, которые обертывают весь материал COM-интерфейса обычным классом C#. Затем вы просто используете его, как и любую другую библиотеку C#. Если импорт ссылки работает хорошо, вы можете изучить ее, как и любую другую ссылку, и методы/структуры/классы/константы должны отображаться в этом пространстве имен и intellisense.

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

person Robert P    schedule 11.03.2009
comment
Есть ли способ сделать это без использования Visual Studio? Я использую код Visual Studio, не думаю, что у него есть встроенная возможность, но интересно, можно ли это сделать каким-либо другим способом? - person Gautam Kumar Samal; 28.06.2021
comment
Я не знаю. Когда я писал это, .net был намного менее зрелым, чем сегодня. Я подозреваю, что есть некоторые инструменты, которые могут сделать это из командной строки. Я предлагаю попробовать некоторые методы здесь: docs.microsoft.com/en-us/dotnet/framework/interop/ - person Robert P; 28.06.2021

Вы можете (изначально) просто импортировать ссылку. Если вам нужно больше контроля (или вы получаете ошибки при импорте VS), вы можете использовать tlbimp в Windows SDK. Это создаст сборки взаимодействия. Вы можете получить определения классов из метаданных.

РЕДАКТИРОВАТЬ: на самом деле это намного сложнее, если вы хотите работать с 64-битной

person Steve    schedule 11.03.2009
comment
Почему это сложнее или иначе? просто используйте tlbimp из набора инструментов x64 .Net - person Tomer W; 16.07.2013
comment
Я предполагаю, что это будут любые зависимые сборки, использующие 32-битную архитектуру. Я знаю, что 64-битные версии приложений, использующие 32-битные скомпилированные сборки COM Interop, не работают и наоборот. У меня всегда было впечатление, что x64 может работать с любой архитектурой, но, по-видимому, это не так. - person Anthony Mason; 24.02.2017