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