Compartir vía


Uso de IConnectionPointContainer

Un objeto conectable implementa IConnectionPointContainer (y lo expone a través de QueryInterface) para indicar la existencia de interfaces salientes. Para cada interfaz saliente, el objeto conectable administra un subobjeto de punto de conexión, que implementa IConnectionPoint. Por lo tanto, el objeto conectable contiene los puntos de conexión, por lo tanto, la nomenclatura de IConnectionPointContainer e IConnectionPoint.

A través de IConnectionPointContainer, un cliente puede realizar dos operaciones. En primer lugar, si el cliente ya tiene el IID para una interfaz saliente que admite, puede localizar el punto de conexión correspondiente para el IID mediante IConnectionPointContainer::FindConnectionPoint. El cliente no puede consultar el punto de conexión directamente debido a la relación contenedora o independiente entre el objeto conectable y sus puntos de conexión contenidos. Básicamente, FindConnectionPoint es queryInterface para interfaces salientes cuando el IID se conoce al cliente.

En segundo lugar, el cliente puede enumerar todos los puntos de conexión dentro del objeto conectable a través de IConnectionPointContainer::EnumConnectionPoints. Este método devuelve un puntero de interfaz IEnumConnectionPoints para un objeto enumerador independiente. A través de IEnumConnectionPoints::Next, el cliente puede obtener punteros de interfaz IConnectionPoint a cada punto de conexión.

Una vez que el cliente obtiene la interfaz IConnectionPoint , debe llamar a IConnectionPoint::GetConnectionInterface para determinar el IID de la interfaz saliente compatible con cada punto de conexión. Si el cliente ya admite esa interfaz saliente, puede establecer una conexión. De lo contrario, puede seguir siendo capaz de admitir la interfaz saliente mediante el uso de información de la biblioteca de tipos del objeto conectable para proporcionar compatibilidad en tiempo de ejecución. Esta técnica requiere que el objeto conectable admita la interfaz IProvideClassInfo . (Consulte Uso de IProvideClassInfo).

Dado que el enumerador es un objeto independiente, el cliente debe llamar a IEnumConnectionPoints::Release cuando el enumerador ya no sea necesario. Además, cada punto de conexión es un objeto con un recuento de referencias independiente del objeto que se puede conectar. Por lo tanto, el cliente también debe llamar a IConnectionPoint::Release para cada punto de conexión al que se tiene acceso a través del enumerador o a través de FindConnectionPoint.

Interfaces de objeto conectables