Изменение правил агрегирования COM с помощью расширений ADSI
Ниже приведен краткий обзор правил агрегирования COM и расширений ADSI.
Метод CreateInstance возвращает указатель на интерфейс IUnknown, как показано ниже, который не делегирует вызовы функций агрегатору.
Метод IUnknown::QueryInterface возвращает указатели на поддерживаемые интерфейсы и ошибки для интерфейсов, которые он не поддерживает.
Метод IUnknown::AddRef увеличивает число ссылок для самого объекта агрегированного расширения.
Метод IUnkown::Release уменьшает количество ссылок в самом объекте агрегированного расширения и уничтожает себя, когда число ссылок равно 0.
Объект расширения должен хранить указатель IUnknown агрегатора, например m_pOuterUnknown, во время реализации метода CreateInstance.
Все интерфейсы, поддерживаемые объектом расширения, включая IADsExtension, должны наследоваться от IUnknown, который делегирует все вызовы функции обратно в агрегатор.
Средства записи расширений могут выбирать любую внутреннюю реализацию, если они подчиняются стандартным правилам агрегирования COM. Помните, что объект расширения не должен работать как автономный объект. Расширения предназначены для работы в качестве агрегатов. Однако расширение можно записать для работы как автономный объект, так и как агрегат.
Помимо стандартной поддержки агрегатов COM объект расширения может поддерживать IADsExtension для более сложных функций. Если поддерживается поздняя привязка, расширение должно:
- Делегировать функции для IDispatch обратно в агрегатор.
- Реализуйте интерфейс IDispatch в IADsExtension.