2009-04-19 3 views
2

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

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

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

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

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

Сердечные приветы PK

ответ

3

Я понятия не имею, почему кто-то downvoted этот вопрос. Для меня это совершенно правильный вопрос; может быть, у них просто не было своего кофе еще этим утром.

Вы, кажется, спрашиваете, какие идентификаторы 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-компонента также могут иметь одно и то же имя. Например, у вас могут быть две библиотеки, которые реализуют интерфейс IDog, но могут делать совершенно разные вещи. Тем не менее, вы все равно должны иметь обе библиотеки, установленные на вашем компьютере, и различие между ними - это то, для чего используются идентификаторы GUID. GUID - это глобально уникальный идентификатор, что означает, что когда вы его генерируете, теоретически никто другой человек на Земле в любой другой момент времени никогда не сможет создать тот же идентификатор GUID. Таким образом, помимо имени, каждый COM-объект (и класс, и библиотека и т. Д.) Имеет идентификатор GUID.

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

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

+0

Итак, когда я пишу COM-компонент, достаточно создать проект библиотеки классов (с открытыми элементами и конструктором по умолчанию), а позже при использовании инструмента tlbexp (или regasm) IUnknown и GUID будут сгенерированы автоматически? – pkolodziej

Смежные вопросы