Какова Объектная модель компонентов (COM)? Действительно ли это является языковозависимым?

Log4Net является довольно всесторонней платформой журналирования, которая позволит Вам регистрироваться к разным уровням (Отладка, Ошибка, Фатальная) и производить эти операторы журнала до мая различные места (прокручивающий файл, веб-сервис, ошибки окон)

, я в состоянии легко зарегистрироваться где угодно путем создания экземпляра регистратора

private static readonly ILog _log = LogManager.GetLogger(typeof([Class Name]));

и затем входа ошибки.

_log.Error("Error messsage", ex);

12
задан TylerH 28 January 2016 в 22:38
поделиться

4 ответа

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

На практике это полезно для нескольких различных примеров:

  1. Связь между разными языки: поскольку COM не зависит от языка, можно использовать COM для передачи данных между компонентами на разных языках. Например, вы можете использовать COM для взаимодействия между кодом C ++, Java и .NET.
  2. Семантика потоковой передачи: COM позволяет вам определять семантику потоковой передачи для конкретного компонента, чтобы гарантировать, что он создается в соответствующем контексте потока, независимо от того, где он находится. используется
  3. Общая компонентность.
7
ответ дан 2 December 2019 в 19:32
поделиться

COM сначала был создан как механизм, позволяющий приложениям Microsoft Office взаимодействовать друг с другом, затем, во второй итерации, он был модифицирован и расширен, чтобы стать спецификацией того, как компоненты двоичного кода могут: - если они были созданы в соответствии со спецификацией - общаются друг с другом и обмениваются данными, независимо от того, на каком языке или ОС они были созданы (при условии, что двоичный файл (скомпилированный .dll или .exe) соответствует COM Спецификация).

Цель заключалась в том, чтобы разрешить «двоичное повторное использование», что означает, что компонент кода может быть повторно использован несколькими компонентами клиентского кода, о которых исходный компонент кода ничего не знал и которые даже не существовали, когда компонент был изначально скомпилирован. По словам одного из первых архитекторов COM, Дона Бокса:

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

6
ответ дан 2 December 2019 в 19:32
поделиться

Подумав немного, я полагаю, что лучший способ выразить это, чтобы вы поняли идею:

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

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

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

Отвечая на ваш вопрос в комментариях:

Для использования COM не нужно ничего устанавливать. Все уже есть в виде функций WinAPI, которые вы можете просто вызвать в своем приложении. DllGetClassObject и CoGetClassObject используются для создания экземпляров COM-объектов. CoRegisterClassObject используется для регистрации COM-объектов, содержащихся в ваших библиотеках, в системе.

Чтобы обеспечить единообразное создание и взаимодействие с COM-объектами, их создание было поручено фабрикам классов, это своего рода вспомогательные объекты. Вы вызываете CoGetClassObject и просите его разрешить вам общаться с фабрикой классов нужного вам объекта. Учитывая интерфейс этой библиотеки классов, вы просите ее создать экземпляр нужного вам объекта. Затем вы можете управлять объектом через интерфейсы, которые он предоставляет.

Взгляните на этот краткий обзор в Википедии: Component Object Model

4
ответ дан 2 December 2019 в 19:32
поделиться

Component Object Model - это стандарт, определенный Microsoft для интерфейса двоичных объектов, не зависящего от языка, т. е. он позволяет различным объектно-ориентированным языкам передавать объекты и вызывать для них методы.

1
ответ дан 2 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

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