Condividi tramite


Mappe di connessione

I controlli OLE sono in grado di esporre interfacce ad altre applicazioni. Queste interfacce consentono l'accesso solo da un contenitore a tale controllo. Se un controllo OLE desidera accedere a interfacce esterne di altri oggetti OLE, deve essere stabilito un punto di connessione. Questo punto di connessione consente un controllo dell'accesso in uscita alle mappe dispatch esterne, ad esempio mappe eventi o funzioni di notifica.

Microsoft Foundation Class Library offre un modello di programmazione che supporta i punti di connessione. In questo modello vengono usate "mappe di connessione" per designare interfacce o punti di connessione per il controllo OLE. Le mappe di connessione contengono una macro per ogni punto di connessione. Per altre informazioni sulle mappe di connessione, vedere la CConnectionPoint classe .

In genere, un controllo supporta solo due punti di connessione: uno per gli eventi e uno per le notifiche delle proprietà. Questi vengono implementati dalla COleControl classe base e non richiedono alcun lavoro aggiuntivo dal writer di controlli. Tutti gli altri punti di connessione che si desidera implementare nella classe devono essere aggiunti manualmente. Per supportare mappe e punti di connessione, MFC fornisce le macro seguenti:

Dichiarazione e demarcazione della mappa delle connessioni

Nome Descrizione
BEGIN_CONNECTION_PART Dichiara una classe incorporata che implementa un punto di connessione aggiuntivo (deve essere usata nella dichiarazione di classe).
END_CONNECTION_PART Termina la dichiarazione di un punto di connessione (deve essere usata nella dichiarazione di classe).
CONNECTION_IID Specifica l'ID interfaccia del punto di connessione del controllo.
DECLARE_CONNECTION_MAP Dichiara che una mappa di connessione verrà usata in una classe (deve essere usata nella dichiarazione di classe).
BEGIN_CONNECTION_MAP Inizia la definizione di una mappa di connessione (deve essere usata nell'implementazione della classe).
END_CONNECTION_MAP Termina la definizione di una mappa di connessione (deve essere usata nell'implementazione della classe).
CONNECTION_PART Specifica un punto di connessione nella mappa di connessione del controllo.

Le funzioni seguenti consentono a un sink di stabilire e disconnettere una connessione usando i punti di connessione:

Inizializzazione/terminazione dei punti di connessione

Nome Descrizione
AfxConnectionAdvise Stabilisce una connessione tra un'origine e un sink.
AfxConnectionUnadvise Interrompe una connessione tra un'origine e un sink.

BEGIN_CONNECTION_PART

Utilizzare la BEGIN_CONNECTION_PART macro per iniziare la definizione di punti di connessione aggiuntivi oltre i punti di connessione di notifica degli eventi e delle proprietà.

BEGIN_CONNECTION_PART(theClass, localClass)

Parametri

theClass Specifica il nome della classe del controllo il cui punto di connessione è.

localClass Specifica il nome della classe locale che implementa il punto di connessione.

Osservazioni:

Nel file di dichiarazione (.h) che definisce le funzioni membro per la classe avviare il punto di connessione con la BEGIN_CONNECTION_PART macro. Aggiungere quindi la CONNECTION_IID macro e tutte le altre funzioni membro da implementare. Completare infine la mappa del punto di connessione con la END_CONNECTION_PART macro.

Requisiti

Intestazione afxdisp.h

END_CONNECTION_PART

Termina la dichiarazione del punto di connessione.

END_CONNECTION_PART(localClass)

Parametri

localClass
Specifica il nome della classe locale che implementa il punto di connessione.

Requisiti

Intestazione afxdisp.h

CONNECTION_IID

Utilizzare tra le BEGIN_CONNECTION_PART macro e END_CONNECTION_PART per definire un ID di interfaccia per un punto di connessione supportato dal controllo OLE.

CONNECTION_IID(iid)

Parametri

iid
ID dell'interfaccia chiamata dal punto di connessione.

Osservazioni:

L'argomento iid è un ID di interfaccia usato per identificare l'interfaccia che il punto di connessione chiama nei sink connessi. Ad esempio:

CONNECTION_IID(IID_ISampleSink)

Specifica un punto di connessione che chiama l'interfaccia ISinkInterface .

Requisiti

Intestazione afxdisp.h

DECLARE_CONNECTION_MAP

Ogni COleControlclasse derivata dal programma può fornire una mappa di connessione per specificare punti di connessione aggiuntivi supportati dal controllo.

DECLARE_CONNECTION_MAP()

Osservazioni:

Se il controllo supporta punti aggiuntivi, usare la DECLARE_CONNECTION_MAP macro alla fine della dichiarazione di classe. Quindi, nel file di .cpp che definisce le funzioni membro per la classe, utilizzare la BEGIN_CONNECTION_MAP macro, CONNECTION_PART le macro per ognuno dei punti di connessione del controllo e la END_CONNECTION_MAP macro per dichiarare la fine della mappa di connessione.

Requisiti

Intestazione afxdisp.h

BEGIN_CONNECTION_MAP

Ogni classe derivata da COleControl nel programma può fornire una mappa di connessioni per specificare i punti di connessione che il controllo supporterà.

BEGIN_CONNECTION_MAP(theClass, theBase)

Parametri

theClass
Specifica il nome della classe del controllo a cui appartiene la mappa delle connessioni.

theBase
Specifica il nome della classe base di theClass.

Osservazioni:

Nel file di implementazione (.CPP) che definisce le funzioni membro per la classe avviare la mappa di connessione con la BEGIN_CONNECTION_MAP macro, quindi aggiungere voci di macro per ognuno dei punti di connessione usando la CONNECTION_PART macro. Completare infine la mappa di connessione con la END_CONNECTION_MAP macro.

Requisiti

Intestazione afxdisp.h

END_CONNECTION_MAP

Termina la definizione della mappa delle connessioni.

END_CONNECTION_MAP()

Requisiti

Intestazione afxdisp.h

CONNECTION_PART

Esegue il mapping di un punto di connessione per il controllo OLE a un ID di interfaccia specifico.

CONNECTION_PART(theClass, iid, localClass)

Parametri

theClass
Specifica il nome della classe del controllo il cui punto di connessione è.

iid
ID dell'interfaccia chiamata dal punto di connessione.

localClass
Specifica il nome della classe locale che implementa il punto di connessione.

Osservazioni:

Ad esempio:

BEGIN_CONNECTION_MAP(CMyClass, CCmdTarget)
    CONNECTION_PART(CMyClass, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()

implementa una mappa di connessione, con un punto di connessione, che chiama l'interfaccia IID_ISinkInterface .

Requisiti

Intestazione afxdisp.h

AfxConnectionAdvise

Chiamare questa funzione per stabilire una connessione tra un'origine, specificata da pUnkSrce un sink, specificato da pUnkSink.

BOOL AFXAPI AfxConnectionAdvise(
    LPUNKNOWN pUnkSrc,
    REFIID iid,
    LPUNKNOWN pUnkSink,
    BOOL bRefCount,
    DWORD FAR* pdwCookie);

Parametri

pUnkSrc
Puntatore all'oggetto che chiama l'interfaccia.

pUnkSink
Puntatore all'oggetto che implementa l'interfaccia .

iid
ID dell'interfaccia della connessione.

bRefCount
Per le connessioni out-of-process, questo parametro deve essere TRUEe indica che la creazione della connessione deve comportare l'incremento del conteggio dei riferimenti di pUnkSink .

Per le connessioni in-process, TRUE indica che la creazione della connessione deve comportare l'incremento del numero di riferimenti di pUnkSink . FALSE indica che il conteggio dei riferimenti non deve essere incrementato.

Avviso: in generale, non è possibile prevedere quali connessioni sono in-process e quali connessioni sono out-of-process, quindi è consigliabile impostare sempre questo parametro su TRUE.

pdwCookie
Puntatore a un oggetto DWORD in cui viene restituito un identificatore di connessione. Questo valore deve essere passato come dwCookie parametro a AfxConnectionUnadvise quando si disconnette la connessione.

Valore restituito

Diverso da zero se è stata stabilita una connessione; in caso contrario, 0.

Esempio

//CMySink is a CCmdTarget-derived class supporting automation.
//Instantiate the sink class.
CMySink mysink;

//Get a pointer to sink's IUnknown, no AddRef done.
IID iid = IID_IUnknown;
IUnknown* pUnkSink = mysink.GetInterface(&iid);

//Establish a connection between source and sink.
//pUnkSrc is IUnknown of server obtained by CoCreateInstance().
//dwCookie is a cookie identifying the connection, and is needed
//to terminate this connection.
AfxConnectionAdvise(pUnkSrc, IID_ISampleSink, pUnkSink, FALSE, &dwCookie);

Requisiti

Intestazione: afxctl.h

AfxConnectionUnadvise

Chiamare questa funzione per disconnettere una connessione tra un'origine, specificata da pUnkSrce un sink, specificato da pUnkSink.

BOOL AFXAPI AfxConnectionUnadvise(
    LPUNKNOWN pUnkSrc,
    REFIID iid,
    LPUNKNOWN pUnkSink,
    BOOL bRefCount,
    DWORD dwCookie);

Parametri

pUnkSrc
Puntatore all'oggetto che chiama l'interfaccia.

pUnkSink
Puntatore all'oggetto che implementa l'interfaccia .

iid
ID interfaccia dell'interfaccia del punto di connessione.

bRefCount
Per le connessioni out-of-process, questo parametro deve essere TRUEe indica che la creazione della connessione deve causare la decrementazione del conteggio dei riferimenti di pUnkSink .

Per le connessioni in-process, TRUE indica che la creazione della connessione deve causare la decrementazione del numero di riferimenti di pUnkSink . FALSE indica che il conteggio dei riferimenti non deve essere decrementato.

Avviso: in generale, non è possibile prevedere quali connessioni sono in-process e quali connessioni sono out-of-process, quindi è consigliabile impostare sempre questo parametro su TRUE.

dwCookie
Identificatore di connessione restituito da AfxConnectionAdvise.

Valore restituito

Diverso da zero se una connessione è stata disconnessa; in caso contrario, 0.

Esempio

//mysink is a CCmdTarget-derived class supporting automation.
//Get a pointer to sink's IUnknown, no AddRef done.
IID iid = IID_IUnknown;
IUnknown* pUnkSink = mysink.GetInterface(&iid);

//Terminate a connection between source and sink.
//pUnkSrc is IUnknown of server obtained by CoCreateInstance().
//dwCookie is a value obtained through AfxConnectionAdvise().
AfxConnectionUnadvise(pUnkSrc, IID_ISampleSink, pUnkSink, FALSE, dwCookie);

Requisiti

Intestazione: afxctl.h

Vedi anche

Macro e globali