Подтвердить что ты не робот

Что такое COM?

Я искал тяжело, но не смог понять всю идею. Может ли кто-нибудь сказать мне:

  • Что такое COM на самом деле?
  • Как работают GUID и как они используются COM?
  • Как COM разрешает проблемы с различными версиями DLL.

Или, по крайней мере, укажите мне хорошую статью где-нибудь, которая объясняет эти понятия? Спасибо!

4b9b3361

Ответ 1

Ваш вопрос немного большой для полного объяснения здесь. Быстрое введение на COM-уровне на высоком уровне можно найти в книге Общие сведения о ActiveX и OL. Более подробное, но все же вводное введение Inside COM. Лучшая книга на эту тему - Don Box Essential COM.

Несколько быстрых ответов:

  • COM - это стандарт двоичного интерфейса для объектов. Он позволяет различным программам писать на интерфейсы без необходимости записывать их в один и тот же langauge с тем же компилятором. Имеются также связанные сервисы.
  • GUID - это глобально уникальные номера, которые COM использует для идентификации интерфейсов.
  • COM не разрешает различные проблемы с версией DLL. Он позволяет регистрировать только одну DLL для каждого GUID.

Ответ 2

COM - это "Component Object Model". Это одна из первых технологий, призванных разрешить "двоичное повторное использование" компонентов... Первоначально это было переписывание того, что было в Microsoft Office примерно в 1988-1992 годах, называемом Dynamic Data Exchange (DDE), технология, позволяющая различным приложениям Office общаться друг с другом. Первая попытка переписать его называлась OLE-Automation (Object Linking and Embedding). Но когда они закончили, они переименовали его в COM.

Как это работает:

По существу, перед COM, когда клиентский компонент хотел использовать компонент (написанный как библиотека С++), его нужно было скомпилировать с помощью библиотеки, чтобы он мог точно знать, сколько байтов в скомпилированном двоичном файле найти каждый метод или вызов функции.

С COM существует определенный механизм того, как эти методы будут структурированы, а затем компилятор создает отдельный файл (называемый библиотекой типов или файлом определения интерфейса (IDL), который содержит все эти данные смещения функции.

Затем, как пользователь компонента, вы должны "зарегистрировать" его, который записывает всю эту информацию (Keyed of GUID) в реестр ОС, где любое клиентское приложение может получить к ней доступ, а также путем чтения данных из в реестре он может знать, где в двоичном файле найти каждый метод или точку входа класса.

Ответ 3

COM позволяет использовать многоразовое программное обеспечение. Как и строительные блоки, вы можете создавать COM-объекты (или теперь сборки в .NET) для обеспечения функциональности более крупного программного обеспечения. Я использовал COM для обеспечения интеграции БД для Excel и MS BizTalk. Программное обеспечение, такое как MS BizTalk, использует COM/Assemblies для расширения возможностей обработки стандартного процесса; вы можете вставить COM в рабочий процесс сообщения, чтобы сделать больше обработки, чем это было реализовано Microsoft. COM также позволяет использовать службы компонентов, обеспечивающие встроенный интерфейс пула объектов, безопасности и управления.

Википедия имеет хорошее определение GUID. Обратите внимание, что Microsoft имеет форматирование, которое не обязательно используется в остальной части сообщества разработчиков.

COM сам по себе не разрешает проблемы с версией DLL. Это позволяет вам постепенно увеличивать программное обеспечение, если вы используете возможности управления версиями COM. Поэтому, если у вас есть приложение, использующее COM для преобразования XML в текст (например), и вы хотите улучшить его, вы можете создать новую версию (2.0), которую вы можете развертывать медленно при обновлении исходного приложения, чтобы использовать новый COM. Таким образом, вы могли бы (если нужно) иметь оператор switch, который может использовать старый COM, если это требуется системными ограничениями, или использовать новый (они будут разными DLL).

Ответ 4

COM - это много разных вещей. Я рекомендую книгу Don Box, Essential COM как хороший способ узнать.

Как минимум, COM-объект представляет собой объект, который предоставляет один интерфейс, IUnknown. Этот интерфейс имеет 3 метода: AddRef, Release и QueryInterface. AddRef/Release позволяет объекту считаться ссылкой и автоматически удаляется при отпускании последней ссылки. QueryInterface позволяет вам опросить объект для других поддерживаемых им интерфейсов.

Большинство объектов COM можно обнаружить. Они зарегистрированы в реестре под HKEY_CLASSES_ROOT с идентификатором GUID, называемым CLSID (идентификатором класса). Это позволяет вам вызвать CoCreateInstance для создания экземпляра зарегистрированного объекта, если вы знаете GUID. Вы также можете запросить реестр через COM API для CLSID, который поддерживает ProgId (идентификатор программы), который является строкой, которая идентифицирует объект.

Многие COM-объекты имеют typelibs, которые определяют интерфейсы и методы, поддерживаемые объектом, а также IDispatch, у которого есть метод Invoke, который позволяет динамически вызывать методы для объекта. Это позволяет использовать объект из языков сценариев, которые не поддерживают сильную типизацию.

Поддержка некоторых объектов в другом процессе, в другом потоке или на другом компьютере. COM поддерживает сортировку для этих типов объектов. Если возможно, стандартный маршаллер может использовать объект typelib для маршальных вызовов к объекту, но также могут быть предоставлены пользовательские маршаллеры.

И там больше объектов COM, я едва царапаю поверхность.

Ответ 5

10 000 футов:

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

GUID объясняются довольно прилично в Википедии http://en.wikipedia.org/wiki/Globally_Unique_Identifier

Я всегда понимал файлы LIB как объектные файлы для компоновщика С++. Они содержат код для всех объектов в файле cpp. Компилятор оптимизирует, когда он связывает игнорирование частей объектного файла, который ему не нужен.

Кто-то, пожалуйста, уточните, так как я уверен, что я сделал кое-что из этого.

Ответ 6

COM - это Microsoft Component Object Model, бинарно-совместимый интерфейс для программ, написанных на разных языках, для взаимодействия друг с другом. Это "эволюционный шаг" между технологиями OLE и .NET.

Если вы хотите узнать о COM с точки зрения С++, взгляните на Don Box Essential COM или Внутренние ATL ректором и Sells.

Группа microsoft.public.vc.atl - это, наверное, лучшее место, чтобы задавать вопросы, на которые вы не можете получить ответы. Это, прежде всего, группа новостей ATL, но, похоже, это новостная группа с наибольшим количеством трафика для общих вопросов COM. (просто будьте готовы к обычному изречению и нетерпению в новостной группе)

Ответ 7

COM - это метод разработки программных компонентов, небольших двоичных exe, которые предоставляют услуги для приложений, ОС и других компонентов. Разработка пользовательского COM-компонента похожа на разработку объектно-ориентированного API. GUID является глобальным уникальным идентификатором и используется для однозначного определения COM-компонента.

Вы можете обратиться к очень хорошей книге Дейла Роджерсона за более подробной информацией. Inside COM