Architettura di oggetti Connessione able
L'oggetto connettibile è solo una parte dell'architettura complessiva degli oggetti collegabili. Questa tecnologia include gli elementi seguenti:
- oggetto Connessione able. Implementa l'interfaccia I Connessione ionPointContainer; crea almeno un oggetto punto di connessione; definisce un'interfaccia in uscita per il client.
- Client. Esegue una query sull'oggetto per I Connessione ionPointContainer per determinare se l'oggetto è collegabile. Crea un oggetto sink per implementare l'interfaccia in uscita definita dall'oggetto connettibile.
- Oggetto sink. Implementa l'interfaccia in uscita; utilizzato per stabilire una connessione all'oggetto connettibile.
- Connessione oggetto punto di Connessione. Implementa l'interfaccia I Connessione ionPoint e gestisce la connessione con il sink del client.
Le relazioni tra client, oggetto connettibile, punto di connessione e sink sono illustrate nel diagramma seguente:
Prima che l'oggetto punto di connessione chiami i metodi nell'interfaccia sink nel passaggio 3 del diagramma precedente, deve eseguire QueryInterface per l'interfaccia specifica richiesta, anche se il puntatore è già stato passato nel passaggio 2 della chiamata al metodo Advise.
In questa architettura sono coinvolti anche due oggetti enumeratore, anche se non visualizzati nell'illustrazione. Uno viene creato da un metodo in I Connessione ionPointContainer per enumerare i punti di connessione all'interno dell'oggetto connettibile. L'altro viene creato da un metodo in I Connessione ionPoint per enumerare le connessioni attualmente stabilite a tale punto di connessione. Un punto di connessione può supportare più interfacce sink connesse e deve scorrere l'elenco delle connessioni ogni volta che effettua una chiamata al metodo su tale interfaccia. Questo processo è noto come multicast.
Quando si utilizzano oggetti connettibili, è importante comprendere che l'oggetto connettibile, ogni punto di connessione, ogni sink e tutti gli enumeratori sono oggetti separati con implementazioni IUnknown separate, conteggi dei riferimenti separati e durate separate. Un client che usa questi oggetti è sempre responsabile del rilascio di tutti i conteggi dei riferimenti di cui è proprietario.
Nota
Un oggetto connettibile può supportare più client e può supportare più sink all'interno di un client. Analogamente, un sink può essere connesso a più oggetti collegabili.
I passaggi per stabilire una connessione tra un client e un oggetto connettibile sono i seguenti:
- Il client esegue una query per I Connessione ionPointContainer sull'oggetto per determinare se l'oggetto è collegabile. Se la chiamata ha esito positivo, il client contiene un puntatore all'interfaccia I Connessione ionPointContainer nell'oggetto connettibile e il contatore dei riferimenti agli oggetti collegabili è stato incrementato. In caso contrario, l'oggetto non è collegabile e non supporta le interfacce in uscita.
- Se l'oggetto è connettibile, il client tenta di ottenere un puntatore all'interfaccia I Connessione ionPoint in un punto di connessione all'interno dell'oggetto connettibile. Esistono due metodi per ottenere questo puntatore, entrambi in I Connessione ionPointContainer::Find Connessione ionPoint e in I Connessione ionPointContainer::Enum Connessione ionPoints. Se si usa Enum Connessione ionPoints, sono necessari alcuni passaggi aggiuntivi. (Vedere Uso di I Connessione ionPointContainer per altre informazioni. In caso di esito positivo, l'oggetto connettibile e il client supportano entrambe la stessa interfaccia in uscita. L'oggetto connettibile lo definisce e lo chiama e il client lo implementa. Il client può quindi comunicare tramite il punto di connessione all'interno dell'oggetto connettibile.
- Il client chiama quindi Advise sul punto di connessione per stabilire una connessione tra l'interfaccia sink e il punto di connessione dell'oggetto. Dopo questa chiamata, il punto di connessione dell'oggetto contiene un puntatore all'interfaccia in uscita nel sink.
- Il codice all'interno di Advise chiama QueryInterface sul puntatore di interfaccia passato, chiedendo l'identificatore di interfaccia specifico a cui si connette.
- L'oggetto chiama metodi sull'interfaccia del sink in base alle esigenze, usando il puntatore mantenuto dal punto di connessione.
- Il client chiama Unadvise per terminare la connessione. Il client chiama quindi I Connessione ionPoint::Release per liberare il blocco sul punto di connessione e, pertanto, anche l'oggetto collegabile principale. Il client deve anche chiamare I Connessione ionPointContainer::Release per liberarne il blocco sull'oggetto connettibile principale.
Argomenti correlati
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per