Esempio di attributi DispSink: gestione di eventi generati da un server COM Singleton mediante un'interfaccia dispatch

Aggiornamento: novembre 2007

Nell'esempio di attributi DispSink viene illustrato un oggetto server Singleton, ovvero un oggetto che può avere un'unica istanza, che dispone di un'interfaccia duale e di un'interfaccia dispatch utilizzata per la generazione di eventi.

L'esempio DispSink rappresenta la versione senza attributi di questo esempio.

Nota:

Alcuni esempi, tra cui il presente, non sono stati cambiati per riflettere le modifiche apportate alle procedure guidate, alle librerie e al compilatore di Visual C++, tuttavia forniscono comunque le istruzioni per completare l'attività desiderata.

Nota sulla sicurezza:

Questo esempio di codice viene fornito solo a scopo dimostrativo e non deve essere utilizzato in applicazioni o siti Web, poiché potrebbe non implementare le tecniche migliori a livello di sicurezza. Microsoft esclude ogni responsabilità per danni diretti o indiretti derivanti dall'utilizzo dell'esempio di codice per scopi diversi da quelli previsti.

Per ottenere gli esempi e le istruzioni per l'installazione:

  • In Visual Studio scegliere Esempi dal menu ?.

    Per ulteriori informazioni, vedere Individuazione dei file di esempio.

  • La versione più recente e l'elenco completo degli esempi sono disponibili in linea alla pagina Visual Studio 2008 Samples.

  • È anche possibile trovare gli esempi sul disco rigido del computer. Per impostazione predefinita, gli esempi e il file Readme vengono copiati in una cartella nel percorso \Programmi\Visual Studio 9.0\Samples\. Per le versioni Express di Visual Studio, tutti gli esempi sono disponibili in linea.

Generazione ed esecuzione dell'esempio

Per generare ed eseguire l'esempio

  1. Aprire il file di soluzione DispSink.sln.

  2. Scegliere Genera soluzione dal menu Genera.

  3. Aprire due o più istanze di ActiveX Control Test Container e inserire il controllo client DispCtl in ciascuna istanza. Per ulteriori informazioni sulla modalità di accesso a Test Container, vedere Verifica di proprietà ed eventi tramite Test Container.

  4. Richiamare il metodo Connect su tutti i controlli.

  5. Richiamare il metodo Send su uno dei controlli. Modificare il campo Tipo parametro della finestra di dialogo Richiama metodi specificando VT_BSTR, quindi digitare qualsiasi stringa nella casella Valore parametro. Fare clic sul pulsante Invoke. La stringa verrà visualizzata al centro di tutti i controlli connessi.

  6. Richiamare il metodo Disconnect su tutti i controlli prima della relativa eliminazione.

Funzionamento dell'esempio

Il server è un oggetto Singleton che dispone di una specifica interfaccia duale e di un'interfaccia dispatch utilizzata per la generazione di eventi. L'interfaccia dispatch viene inserita nel file IDL utilizzando l'attributo dispinterface. L'oggetto server riceve i dati utilizzando il metodo Send dell'interfaccia duale e li trasmette a tutti i componenti collegati mediante l'evento Transfer dell'interfaccia dispatch. Dispserver utilizza l'attributo event_source, mentre Dispclient utilizza l'attributo event_receiver.

Il client è un controllo ActiveX contenente un oggetto server. Il controllo risponde all'evento Transfer generato dall'oggetto server ed è dotato di un'interfaccia duale che dispone dei metodi Connect, Send e Disconnect. Se l'evento Transfer viene generato con un elemento Variant contenente un BSTR, la stringa verrà visualizzata al centro del controllo.

Attributi

Nell'esempio vengono utilizzati i seguenti attributi:

  • DISPSINK/DispClient   coclass, dual, event_receiver, helpstring, id, module, object, pointer_default, registration_script, threading, uuid, version, vi_progid

  • DISPSINK/DispServer   coclass, default, dispinterface, dual, event_source, helpstring, id, module, object, pointer_default, threading, uuid, vi_progid

Parole chiave

Nell'esempio vengono utilizzate le parole chiave seguenti:

#import; CComAutoThreadModule; CComSimpleThreadAllocator; CoCreateInstance; DECLARE_CLASSFACTORY_AUTO_THREAD; FireViewChange

Vedere anche

Altre risorse

Esempi di attributi ATL