Создание Registration-Free COM-объектов

Контексты активации позволяют использовать COM-объекты без необходимости их регистрации. Это позволяет приложению иметь несколько компонентов с разными функциональными возможностями в зависимости от их версии, а не сведений о реестре. Несколько компонентов могут предоставлять один и тот же COM-объект с одинаковым ИДЕНТИФИКАТОРом GUID, но имеют разные функциональные возможности в зависимости от версии.

Когда приложение запрашивает GUID из CLSIDFromProgID, COM сначала ищет сопоставление от progid к CLSID в активном контексте активации. Когда приложение использует CoCreateInstance для получения указателя интерфейса экземпляра, COM выполняет поиск в активном контексте активации, чтобы найти библиотеку DLL, в которой будет размещен CLSID. Если контекст активации не содержит необходимых сведений, COM выполняет поиск сведений в реестре обычным методом.

Обратите внимание, что так как контексты активации зависят от потока, COM маршалирует контекст активации создаваемого потока в поток узла и активирует его перед вызовом LoadLibrary или DllGetClassObject в потоке узла. Эта функция уже присутствует в Windows, клиентский код не требуется ничего делать для реализации этой функции.

Классы COM можно экспортировать размещенными компонентами без использования реестра. Несколько компонентов могут предоставлять один и тот же Идентификатор ProgID для разных COM-объектов, и приложение размещения должно найти только правильный контекст активации, а затем использовать CLSIDFromProgID и CoCreateInstance для получения указателей интерфейса размещенного объекта.