Вопрос интерфейса COM - .NET - PullRequest
2 голосов
/ 19 апреля 2009

Недавно я читал об организации взаимодействия, но до сих пор не понимаю одну вещь. Чтобы сделать сборку .NET видимой для COM, мне нужно использовать инструмент tlbexp и / или regasm. Чтобы сделать COM видимым для .NET, я должен использовать инструмент tlbimp - все, что мне ясно.

  1. Кроме того, я видел в Интернете много кода, касающегося интерфейсов COM с атрибутами guid, IUnknown и IDispach.

Мой вопрос, как все это относится к COM - мне нужно это использовать? Я готовлюсь к сертификации, но они не сказали ни слова об интерфейсах, руководствах, IUnknown и т.д ...

Мне не очень нравится оставлять за собой неясные вещи, поэтому, если кто-то может объяснить мне это, я был бы очень благодарен.

  1. У меня также есть один вопрос относительно библиотеки типов, импортированной из COM (инструмент tlbimp). Требуется ли для библиотеки типов, импортируемой из COM, COM-объект, зарегистрированный в системе?

С уважением PK

1 Ответ

3 голосов
/ 19 апреля 2009

Понятия не имею, почему кто-то отклонил этот вопрос. Мне кажется, это совершенно правильный вопрос; может, они просто еще не пили кофе сегодня утром.

Похоже, вы спрашиваете, что GUID, IUnknown и IDispatch имеют отношение к COM. Я постараюсь дать краткий обзор.

Каждый компонент COM предоставляет общий интерфейс IUnknown. IUnknown имеет методы AddRef (), Release () и QueryInterface (). AddRef () и Release () используются для поддержки подсчета ссылок, так что когда каждая ссылка на объект будет освобождена, объект будет уничтожен. QueryInterface () отчасти напоминает COM-версию оператора dynamic_cast <> в C ++. Он используется клиентским кодом, чтобы увидеть, указывает ли указатель IUnknow, который у них есть, на объект другого типа, например, IDog, ICat или любой другой.

Таким образом, каждый COM-компонент должен реализовывать IUnknown, но большинство COM-библиотек реализуют это автоматически, поэтому при написании COM-кода вам обычно не нужно писать какой-либо код, чтобы получить IUnknown; Вы получаете это бесплатно.

GUID - это как отпечатки пальцев. Как в реальной жизни два человека могут иметь одно и то же имя, так и в COM два COM-компонента также могут иметь одинаковое имя. Например, вы можете иметь 2 библиотеки, которые реализуют интерфейс IDog, но они могут делать совершенно разные вещи. Тем не менее, вы должны иметь возможность установить обе библиотеки на своем компьютере, и различие между ними заключается в том, для чего используются GUID. GUID - это глобально уникальный идентификатор, означающий, что когда вы его генерируете, теоретически ни один другой человек на Земле в любой другой момент времени не сможет создать такой же GUID. Таким образом, в дополнение к имени каждый COM-объект (и coclass, и библиотека, и т. Д.) Имеет GUID.

IDispatch - это еще один базовый интерфейс, очень похожий на IUnknown, но в отличие от IUnknown, который требуется для каждого COM-объекта, IDispatch является необязательным и предоставляет специальные функции, которые поддерживаются многими, но не всеми COM-объектами. Такие вещи, как поддержка функций языка Certian и облегчение использования вашего объекта клиентами. Большинство (вероятно) COM-объектов предоставляют этот интерфейс.

Что касается библиотек COM; да, они должны быть зарегистрированы в Windows.

...