Возможно ли наследование для COM-объектов? - PullRequest
1 голос
/ 06 сентября 2010

Возможно ли наследование для COM-объектов?

Допустим, я хотел бы переопределить некоторые методы.

Ответы [ 2 ]

4 голосов
/ 06 сентября 2010

Вы реализуете это в COM с агрегацией.

По сути, вы создаете объект, который реализует некоторые интерфейсы и обертывает доступ к внутреннему объекту.

Внутренний объект, который вы создаете, вызывая CoCreateInstance и передача ваших собственных объектов IUnknown в качестве параметра pUnkOuter.

Если внутренний объект поддерживает его (правильно), он будет откладывать все вызовы интерфейса для внешнего объекта, предоставляя вашему объекту первый шансдля обеспечения любых интерфейсов.


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

Если вы нашли ком-объект с готовой поддержкой агрегации - вы должны были использовать эту удачу в лотерейном билете.: P

1 голос
/ 06 сентября 2010

Интерфейсы могут наследовать другие интерфейсы, но у компонента нет возможности переопределить другой компонент, кроме как по составу, то есть перенаправить другие методы в составной компонент, а затем напрямую реализовать «переопределенные» методы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...