Что такое COM (Объектная модель компонентов) вкратце? [закрытый]

75
задан 18 January 2009 в 18:45
поделиться

2 ответа

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

, Если Вы хотите хорошее введение в COM, читайте Существенный COM Поле .

Дона
30
ответ дан McDowell 7 November 2019 в 07:21
поделиться

COM является механизмом, который позволяет повторное использование объектов (или скорее компоненты), независимо от языков, используемых программистом, который реализовал компонент и программиста, который использует его, и независимо от того, был ли компонент реализован в программе клиента или в другом месте на машине (или сеть).

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

interface IUnknown
{
   virtual HRESULT QueryInterface(REFIID riid, void **ppvObject) = 0;
   virtual ULONG AddRef(void) = 0;
   virtual ULONG Release(void) = 0;
};

Этот небольшой интерфейс фундаментален в COM, потому что каждый COM-компонент должен реализация это. Это определяет два важных аспекта оборудования COM:

  • QueryInterface позволяет коду вызова получать реализацию для известного интерфейса. В COM на интерфейсы ссылаются GUID (также известный как Интерфейсные Идентификаторы, IID). Если объект реализует несколько интерфейсов, это - то, как клиентский код получает ссылку на каждый из тех интерфейсов. Это действует как своего рода оператор кастинга, если Вы будете.
  • AddRef() и Release() реализуют механизм управления памятью для COM-объектов. Как их имя предполагает, наиболее распространенная модель является механизмом подсчета ссылок, где экземпляр уничтожается после того, как последний клиент выпустил его ссылку на него.

Все COM-компоненты регистрируются в системе на установку. Если программист хочет использовать определенный компонент, он должен:

  • Удостоверяются, что компонент установлен в достижимом местоположении. Большую часть времени это находится в системе запущенного приложения, но COM + также позволяет компонентам существовать на удаленных компьютерах.
  • Знают GUID данного компонента. С этим GUID клиент может тогда попросить, чтобы система инстанцировала компонента (в C, функция, чтобы сделать, это называют CoCreateInstance()). Можно посмотреть в реестре под HKEY_CLASSES_ROOT\CLSID: каждый GUID там является (по всей вероятности) идентификатором для COM-компонента или интерфейса, и записи ниже того ключа говорят систему, как это должен быть instanciated.

оборудование COM чрезвычайно сложно. Например, реализация или использование COM-компонентов в C требуют ужасающего объема работы, но высокоуровневые языки как Visual Basic сделали много для упрощения реализации и использования COM-компонентов. Преимущества однако очень реальны. Это позволяет записать приложение в, скажем, Visual Basic, но все еще реализовать критические по отношению к производительности алгоритмы в C или C++ как COM-объекты, которые могут использоваться непосредственно от кода VB. Система заботится о [1 121] маршалинг аргументы вызова метода, передавая их через потоки, процессы и сетевые соединения по мере необходимости так, чтобы клиентский код имел впечатление от использования обычного объекта.

Много фундаментальных частей Windows основаны на COM. Windows Explorer (файловый менеджер), например, является в основном пустой оболочкой. Это определяет набор COM-интерфейсов для навигации и отображения древовидных иерархий и всего кода, который на самом деле отображает "Мой Компьютер", диски, папки и файлы как ряд COM-компонентов, которые реализуют те интерфейсы.

С появлением.NET, COM медленно становится устаревшим.

90
ответ дан BornToCode 7 November 2019 в 07:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: