Eventi COM
Aggiornamento: novembre 2007
In questo argomento viene fornita una panoramica dei punti di connessione e viene introdotta la terminologia comunemente utilizzata per descrivere gli eventi COM.
I punti di connessione stabiliscono una comunicazione bidirezionale tra un client e un server in COM. Tale meccanismo permette a un server COM di richiamare un client quando si verifica un evento. Un server quale Microsoft Internet Explorer può ad esempio generare un evento per notificare una modifica del titolo al proprio programma client. Il client si prepara alle notifiche in ingresso creando un oggetto COM interno denominato sink di evento. Quando riceve la notifica, il client potrà svolgere le operazioni associate all'evento.
Un sink di evento fornisce un'interfaccia che espone al server i metodi relativi all'evento. I server generano gli eventi chiamando tali metodi. Il client implementa l'interfaccia del sink di evento come una normale interfaccia COM. Il server dichiara l'interfaccia come un'interfaccia in uscita. L'autore del server COM applica l'attributo source all'interfaccia nella libreria dei tipi del server COM. Il server si avvale delle definizioni presenti nell'interfaccia del sink di evento per identificare i metodi sink e invoke.
Un client COM che implementa l'interfaccia di un sink di evento è spesso definito sink di evento o semplicemente sink. Nella figura che segue, il sink implementa l'interfaccia ISinkEvents. Il server che genera l'evento è noto come origine.
Modello eventi basato sui punti di connessione
Dopo aver creato l'interfaccia del sink di evento, occorrerà collegare il sink all'origine. Il meccanismo basato sui punti di connessione collega il sink all'origine utilizzando il protocollo illustrato di seguito:
Il sink verifica la disponibilità dell'interfaccia IConnectionPointContainer su un oggetto server. Se l'oggetto supporta i punti di connessione, restituirà un puntatore.
Avvalendosi dei metodi forniti dall'oggetto contenitore, il sink individua l'interfaccia IConnectionPoint che rappresenta uno specifico punto di connessione. Poiché un server può supportare più interfacce in uscita, un client dovrà stabilire una corrispondenza tra il proprio sink e l'identificatore dell'interfaccia (IID, Interface Identifier) di un particolare punto di connessione.
Una volta ottenuto l'oggetto punto di connessione corretto, il sink chiama IConnectionPoint::Advise per registrare il puntatore all'interfaccia. Il server (origine) mantiene la connessione e vi genera eventi fino a quando il client non la interrompe chiamando IConnectionPoint::Unadvise.
Visual Basic nasconde la maggior parte dei dettagli del funzionamento dei punti di connessione. È comunque necessario includere una direttiva WithEvents nella dichiarazione che il client fa del server. In C++, il codice del client deve prima verificare la disponibilità dei metodi IConnectionPointContainer e IConnectionPoint, quindi chiamarli. Il server implementa entrambe le interfacce.
Vedere anche
Attività
Procedura: generare eventi gestiti da un sink COM
Procedura: gestire gli eventi generati da un'origine COM