Log4Net является довольно всесторонней платформой журналирования, которая позволит Вам регистрироваться к разным уровням (Отладка, Ошибка, Фатальная) и производить эти операторы журнала до мая различные места (прокручивающий файл, веб-сервис, ошибки окон)
, я в состоянии легко зарегистрироваться где угодно путем создания экземпляра регистратора
private static readonly ILog _log = LogManager.GetLogger(typeof([Class Name]));
и затем входа ошибки.
_log.Error("Error messsage", ex);
COM по своей сути - это способ предоставления контракта на передачу данных, который не зависит от какого-либо конкретного языка. Это доказано не зависит от языка, так как существует множество языков, поддерживающих COM (существуют реализации C ++, C, .NET и Java)
На практике это полезно для нескольких различных примеров:
COM сначала был создан как механизм, позволяющий приложениям Microsoft Office взаимодействовать друг с другом, затем, во второй итерации, он был модифицирован и расширен, чтобы стать спецификацией того, как компоненты двоичного кода могут: - если они были созданы в соответствии со спецификацией - общаются друг с другом и обмениваются данными, независимо от того, на каком языке или ОС они были созданы (при условии, что двоичный файл (скомпилированный .dll или .exe) соответствует COM Спецификация).
Цель заключалась в том, чтобы разрешить «двоичное повторное использование», что означает, что компонент кода может быть повторно использован несколькими компонентами клиентского кода, о которых исходный компонент кода ничего не знал и которые даже не существовали, когда компонент был изначально скомпилирован. По словам одного из первых архитекторов COM, Дона Бокса:
[...] Парадигма проектирования COM заключалась в том, что контракты компонентов выражались в виде определений типов. Это был шаг вперед по сравнению с замененным миром COM, в котором контракты были выражены только как простые функциональные точки входа. В этом отношении COM был большим достижением, поскольку он довольно согласованно объединил динамическую загрузку кода и систему типов. .
Подумав немного, я полагаю, что лучший способ выразить это, чтобы вы поняли идею:
COM - это способ расширения Windows API и публикации других пользовательских библиотек в системе, чтобы вы могли обнаруживать эти новые API и работать с ними таким же образом без необходимости перекомпилировать приложение.
COM-объекты зарегистрированы в системе (путем добавления некоторых хуков в реестр Windows). После этого ваше приложение может запрашивать во время выполнения наличие этих ожидаемых библиотек и на основании их доступности решать, как действовать дальше (вместо сбоя, когда статически связанная библиотека не найдена).
Этот механизм предполагается чтобы быть независимым от языка, поэтому любое приложение, написанное на любом языке, должно иметь возможность вызывать эти интерфейсы и запускать операции этих библиотек. На практике, однако, некоторые языки не поддерживают некоторые типы COM, поэтому они получают ограниченные возможности COM.
Отвечая на ваш вопрос в комментариях:
Для использования COM не нужно ничего устанавливать. Все уже есть в виде функций WinAPI, которые вы можете просто вызвать в своем приложении. DllGetClassObject и CoGetClassObject используются для создания экземпляров COM-объектов. CoRegisterClassObject используется для регистрации COM-объектов, содержащихся в ваших библиотеках, в системе.
Чтобы обеспечить единообразное создание и взаимодействие с COM-объектами, их создание было поручено фабрикам классов, это своего рода вспомогательные объекты. Вы вызываете CoGetClassObject и просите его разрешить вам общаться с фабрикой классов нужного вам объекта. Учитывая интерфейс этой библиотеки классов, вы просите ее создать экземпляр нужного вам объекта. Затем вы можете управлять объектом через интерфейсы, которые он предоставляет.
Взгляните на этот краткий обзор в Википедии: Component Object Model
Component Object Model - это стандарт, определенный Microsoft для интерфейса двоичных объектов, не зависящего от языка, т. е. он позволяет различным объектно-ориентированным языкам передавать объекты и вызывать для них методы.