Esempio di attributi ATLDuck: utilizzo di punti di connessione con ATL

Aggiornamento: novembre 2007

L'esempio di attributi ATLDuck è costituito da due progetti: atlduck e duck. Nel progetto duck viene creata l'istanza di un oggetto che implementa l'interfaccia IDuckInt, in cui sono incluse quattro funzioni membro: Flap, Paddle, Quack e Walk.

Il secondo progetto, atlduck, dispone di un punto di connessione per l'interfaccia IDuckInt. È quindi in grado di utilizzare l'interfaccia, ma non ne effettua l'implementazione. Di questo oggetto viene creata una sola istanza. Una volta stabilita la connessione tra le due applicazioni, atlduck chiamerà le funzioni dell'interfaccia IDuckInt per i sink che hanno effettuato la chiamata a IConnectionPoint::Advise.

Nell'esempio ATLDuck vengono illustrati diversi attributi IDL, COM e del compilatore, tra cui aggregatable, event_source ed event_receiver. La classe DuckInt viene impostata come non aggregabile specificando l'attributo aggregratable("never"). La classe DuckDoer viene impostata come un event_source COM e la classe DuckInt come un event_receiver COM, non dipendenti dal layout (senza layout dependent=true).

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

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 Guida.

    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 Leggimi 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 l’esempio

  1. Aprire il file di soluzione atlduck.sln.

  2. Scegliere Genera soluzione dal menu Genera. Verranno generati entrambi i progetti e verrà eseguita la necessaria registrazione. Verranno creati i seguenti file:

    • atlduck.exe, un server EXE

    • duck.exe, un client EXE

Per eseguire l'esempio

  1. Scegliere Avvia senza eseguire debug dal menu Debug. Verranno avviati il server atlduck e un'istanza del client duck. Per eseguire più client, individuare la directory in cui si trova duck.exe ed eseguire tale file manualmente dal prompt dei comandi.

  2. Verrà visualizzata una finestra di dialogo. Scegliere il pulsante Create DoDuck Object disponibile nella finestra di dialogo. Quando viene scelto questo pulsante, nell'applicazione viene creata un'istanza di un oggetto con la classe ID CLSID_DuckDoer, eseguendo atlduck.

  3. Verrà quindi visualizzata una nuova finestra di dialogo, emessa da atlduck.exe. In tale finestra di dialogo viene visualizzato un pulsante per ciascuna funzione dell'interfaccia IDuckInt, nonché una casella di riepilogo con le connessioni ai sink attivi e ai relativi cookie. Dalle finestre di dialogo di duck è possibile chiamare Advise o Unadvise sul punto di connessione. In base alla selezione effettuata si riceveranno o meno notifiche dalle origini. La notifica eventualmente ricevuta verrà visualizzata nel campo di modifica dello stato. Nell'esempio ATLDuck viene inoltre illustrato il valore del cookie fornito dal punto di connessione quando viene attivata la notifica della connessione.

Attributi

Nell'esempio vengono utilizzati i seguenti attributi:

  • ATLDuck   aggregatable, coclass, dispinterface, event_source, exe, helpstring, id, module, name, progid, uuid, vi_progid

  • ATLDuck/Duck   aggregatable, coclass, default, dispinterface, event_receiver, exe, helpstring, id, iid_is, in, module, name, object, out, progid, unique, uuid, version, vi_progid

Classi e parole chiave

Nell'esempio vengono utilizzate le seguenti classi:

CDialog (MFC), CComObject (ATL), IConnectionPointImpl<CDuckDoer> (ATL)

Nell'esempio vengono utilizzate le parole chiave seguenti:

_ASSERTE; _tcslen; _VERIFY; AddRef; Advise; BEGIN_COM_MAP; BEGIN_CONNECTION_POINT_MAP; BEGIN_MSG_MAP; BEGIN_OBJECT_MAP; CComCoClass; CComModule::Unlock; CComObjectRootEx; CDialogImpl; CenterWindow; CoInitialize; COM_INTERFACE_ENTRY; COM_INTERFACE_ENTRY_IMPL; COMMAND_HANDLER; COMMAND_ID_HANDLER; CONNECTION_POINT_ENTRY; CoSuspendClassObjects; CoUninitialize; Create; DECLARE_CLASSFACTORY_SINGLETON; DECLARE_NOT_AGGREGATABLE; DECLARE_REGISTRY_RESOURCEID; DestroyWindow; DispatchMessage; EnableWindow; END_COM_MAP; END_CONNECTION_POINT_MAP; END_MSG_MAP; END_OBJECT_MAP; ExitProcess; FindConnectionPoint; GetCommandLine; GetDC; GetDlgItem; GetMessage; GetTextExtentPoint32; IConnectionPointContainerImpl; IConnectionPointImpl; Init; IsWindowVisible; MESSAGE_HANDLER; MessageBox; OBJECT_ENTRY; OleInitializeCoCreateInstance; OnCancel; OnFlap; OnInitDialog; OnOK; OnPaddle; OnWalk OnQuack; PostThreadMessage; QueryInterface; RecalcListboxExtent; RegisterClassObjects; RegisterServer; reinterpret_cast; ReleaseDC; RevokeClassObjects; SendMessage; SetOwner; SetWindowText; ShowStatus; ShowWindow; Unadvise; UnregisterServer; UNUSED_ALWAYS; UpdateRegistryFromResource; UpdateWindow; USES_CONVERSION

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.

Vedere anche

Altre risorse

Esempi di attributi ATL