Esempio di attributi CONNECT: dimostrazione dell'implementazione e dell'utilizzo dei punti di connessione

Aggiornamento: novembre 2007

Nell'esempio di attributi CONNECT vengono illustrati l'implementazione e l'utilizzo dei punti di connessione, ovvero le interfacce IConnectionPointContainer e IConnectionPoint, in un ambiente con multithreading.

Nell'esempio vengono illustrati diversi attributi IDL, COM e del compilatore comunemente utilizzati, tra cui support_errorinfo, event_source ed event_receiver.

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 ed eseguire l'esempio

  1. Aprire il file di soluzione connect.sln.

  2. Scegliere Genera soluzione dal menu Genera.

  3. Selezionare il client che si desidera eseguire, Drive o MDrive, quindi impostare tale client come progetto di avvio. A tale scopo, fare clic con il pulsante destro del mouse sulla cartella del progetto e scegliere Imposta come progetto di avvio. Maggiori informazioni sui client sono fornite nella sezione Funzionamento dell'esempio.

  4. Scegliere Avvia senza eseguire debug dal menu Debug.

Funzionamento dell'esempio

Il server è implementato in Connect.dll. Questa DLL consente la creazione di un oggetto COM CoRandom, implementato dalla classe C++ CRandom. L'oggetto COM supporta IConnectionPointContainer e l'interfaccia duale IRandom e accetta connessioni per l'interfaccia IRandomEvent.

L'interfaccia IRandom supporta i metodi riportati di seguito.

  • Start: avvia un thread all'interno dell'oggetto.

  • Stop: interrompe un thread all'interno dell'oggetto.

  • StopAll: interrompe tutti i thread in esecuzione.

Durante l'esecuzione, dai thread secondari all'interno dell'oggetto vengono continuamente generati eventi tramite il punto di connessione.

Vengono forniti due client, Drive e MDrive, che si trovano nelle sottodirectory Drive e MDrive.

  • Drive.exe costituisce una semplice applicazione console dalla quale viene fornito un unico oggetto che implementa l'interfaccia IRandomEvent. Viene creato un oggetto CoRandom, vengono chiamati Advise e Unadvise sul punto di connessione e viene determinata la generazione di eventi nell'oggetto dell'unità da parte dell'oggetto CoRandom.

  • Mdrive.exe è un'applicazione MFC a finestre di dialogo, in grado di creare più sink di notifica e di controllare il numero di thread creati dal server. Quando si esegue Mdrive.exe, scegliere Start almeno una volta, quindi scegliere più volte Advise. Ogni volta che si sceglie il pulsante Advise viene aggiunto un punto di connessione e viene quindi estesa la visualizzazione. Se non si sceglie Advise, non verrà visualizzata alcuna attività.

Attributi

Nell'esempio vengono utilizzati i seguenti attributi:

  • Connect   coclass, default, dll, dual, event_source, helpstring, id, in, module, name, object, out, pointer_default, progid, support_error_info, uuid, vi_progid

  • Connect/drive   event_receiver, module

Parole chiave

Nell'esempio vengono utilizzate le parole chiave seguenti:

AfxGetApp; AfxMessageBox; AtlAdvise; ATLASSERT; AtlUnadvise; BEGIN_COM_MAP; BEGIN_CONNECTION_POINT_MAP; BEGIN_MESSAGE_MAP; BEGIN_OBJECT_MAP; CComCoClass; CComModule::GetClassObject; CComModule::GetLockCount; CComModule::Init; CComModule::RegisterServer; CComModule::Term; CComModule::UnregisterServer; CComObject::CreateInstance; CComObjectRoot; CDialog::OnCancel; CDialog::OnOK; CloseHandle; CoCreateInstance; COleTemplateServer::RegisterAll; COM_INTERFACE_ENTRY; COM_INTERFACE_ENTRY_IMPL; COM_INTERFACE_ENTRY2; CONNECTION_POINT_ENTRY; CoUninitialize; CreateEvent; CreateThread; DECLARE_REGISTRY_RESOURCEID; DisableThreadLibraryCalls; DoModal; DrawIcon; END_COM_MAP; END_CONNECTION_POINT_MAP; END_MESSAGE_MAP; END_OBJECT_MAP; GdiFlush; GetClientRect; GetDlgItem; GetTickCount; GetUnknown; IConnectionPointContainerImpl; IConnectionPointImpl; IDispatchImpl; ISupportErrorInfo; LoadIcon; Lock; memset; OBJECT_ENTRY; ON_COMMAND; puts; ReleaseDC; SendMessage; SetEvent; SetIcon; SetPixel; Sleep; Unadvise; Unlock; WaitForSingleObject

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