Вопрос интерфейса COM - .NET
Недавно я читал о маршаллинге взаимодействия, но я все еще не понимаю одну вещь. Чтобы сделать сборку.NET видимой для COM, мне нужно использовать инструмент tlbexp и / или regasm. Чтобы сделать COM видимым для.NET, я должен использовать инструмент tlbimp - все, что для меня ясно.
Кроме того, я видел в Интернете много кода, касающегося интерфейсов COM с атрибутами guid, IUnknown и IDispach.
Мой вопрос, как все это относится к COM - мне нужно это использовать? Я готовлюсь к сертификации, но они не сказали ни слова об интерфейсах, руководствах, IUnknown и т.д...
Мне не очень нравится оставлять неясные вещи позади меня, поэтому, если кто-то может объяснить мне это, я был бы очень благодарен.
- У меня также есть один вопрос относительно библиотеки типов, импортированной из COM (инструмент tlbimp). Требуется ли для библиотеки типов, импортируемой из COM, зарегистрированный в системе объект COM?
С наилучшими пожеланиями ПК
1 ответ
Я понятия не имею, почему кто-то отклонил этот вопрос. Мне кажется, это совершенно правильный вопрос; может, они просто еще не пили кофе сегодня утром.
Вы, кажется, спрашиваете, что 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.