Esempio ATLDuck: utilizzo di punti di connessione con ATL

Aggiornamento: novembre 2007

L'esempio ATLDuck comprende quattro progetti: atlduck, duck e i rispettivi progetti proxy/stub atlduckPS e duckPS. Nel progetto duck viene creata un'istanza di un oggetto che implementa l'interfaccia IDuckInt. In questa interfaccia sono incluse quattro funzioni membro: Flap, Paddle, Quack e Walk.

Nel secondo progetto, atlduck, è presente un punto di connessione per l'interfaccia IDuckInt. In altre parole, il progetto è in grado di utilizzare l'interfaccia, ma non la implementa direttamente. Di questo oggetto viene creata una sola istanza. Una volta stabilita la connessione tra le due applicazioni, atlduck chiamerà le funzioni nell'interfaccia IDuckInt per i sink che hanno chiamato IConnectionPoint::Advise.

Nell'esempio viene inoltre utilizzato il codice di marshalling, tramite atlduckPS e duckPS, necessario per connettere le interfacce in processi diversi.

In Esempio di attributi per ATLDuck viene fornita la versione con gli 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 ?.

    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. In questo modo verranno creati i quattro progetti e verrà eseguita la registrazione necessaria. Verranno creati i seguenti file:

    • atlduck.exe, un server EXE

    • atlduckPS.dll, una DLL di marshalling per il server atlduck.exe

    • duck.exe, un client EXE

    • duckPS.dll, una DLL di marshalling per il client duck.exe

Per eseguire l'esempio

  1. Avviare una o più istanze di duck.exe.

    Nota:

    Con l'apertura di più istanze di duck.exe è possibile evidenziare i punti di connessione con maggiore efficacia.

  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 questa finestra di dialogo viene visualizzato un pulsante per ogni funzione presente nell'interfaccia IDuckInt, nonché una casella di riepilogo contenente le connessioni ai sink attivi e i 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.

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

Vedere anche

Altre risorse

Esempi relativi ad ATL