Вы реализуете это в COM с агрегацией.
По сути, вы создаете объект, который реализует некоторые интерфейсы и обертывает доступ к внутреннему объекту.
Внутренний объект, который вы создаете, вызывая CoCreateInstance и передача ваших собственных объектов IUnknown в качестве параметра pUnkOuter.
Если внутренний объект поддерживает его (правильно), он будет откладывать все вызовы интерфейса для внешнего объекта, предоставляя вашему объекту первый шансдля обеспечения любых интерфейсов.
Обратите внимание, что трагически мало COM-объектов фактически поддерживают агрегацию - потому что реализовать поддержку сложно (а) трудно, а (б) трудно оправдать в любой модели разработки, где коднаписано для удовлетворения насущных потребностей (которые охватывают большинство текущих методологий разработки модных слов) - я с сожалением ожидаю, что большинство com-объектов (в лучшем случае) ответят E_NOTSUPPORTED, или (в худшем случае) получат некоторую половину протестированной попытки, какподдержка агрегации, которая в основном приводит к бесконечностиИте рекурсия, как только она будет использоваться нетривиальным способом.
Если вы нашли ком-объект с готовой поддержкой агрегации - вы должны были использовать эту удачу в лотерейном билете.: P