Freigeben über


Verbindungszuordnungen

OLE-Steuerelemente können Schnittstellen für andere Anwendungen verfügbar machen. Diese Schnittstellen ermöglichen nur den Zugriff von einem Container in dieses Steuerelement. Wenn ein OLE-Steuerelement auf externe Schnittstellen anderer OLE-Objekte zugreifen möchte, muss ein Verbindungspunkt eingerichtet werden. Mit diesem Verbindungspunkt kann ein ausgehender Zugriff auf externe Verteilerzuordnungen gesteuert werden, z. B. Ereigniszuordnungen oder Benachrichtigungsfunktionen.

Die Microsoft Foundation-Klassenbibliothek bietet ein Programmiermodell, das Verbindungspunkte unterstützt. In diesem Modell werden "Verbindungszuordnungen" verwendet, um Schnittstellen oder Verbindungspunkte für das OLE-Steuerelement festzulegen. Verbindungszuordnungen enthalten ein Makro für jeden Verbindungspunkt. Weitere Informationen zu Verbindungszuordnungen finden Sie in der CConnectionPoint Klasse.

In der Regel unterstützt ein Steuerelement nur zwei Verbindungspunkte: eines für Ereignisse und eines für Eigenschaftenbenachrichtigungen. Diese werden von der COleControl Basisklasse implementiert und erfordern keine zusätzliche Arbeit durch den Steuerelementschreiber. Alle anderen Verbindungspunkte, die Sie in Ihrer Klasse implementieren möchten, müssen manuell hinzugefügt werden. Um Verbindungszuordnungen und -punkte zu unterstützen, stellt MFC die folgenden Makros bereit:

Verbindungszuordnungsdeklaration und Abgrenzung

Name Beschreibung
BEGIN_CONNECTION_PART Deklariert eine eingebettete Klasse, die einen zusätzlichen Verbindungspunkt implementiert (muss in der Klassendeklaration verwendet werden).
END_CONNECTION_PART Beendet die Deklaration eines Verbindungspunkts (muss in der Klassendeklaration verwendet werden).
CONNECTION_IID Gibt die Schnittstellen-ID des Verbindungspunkts des Steuerelements an.
DECLARE_CONNECTION_MAP Deklariert, dass eine Verbindungszuordnung in einer Klasse verwendet wird (muss in der Klassendeklaration verwendet werden).
BEGIN_CONNECTION_MAP Beginnt mit der Definition einer Verbindungszuordnung (muss in der Klassenimplementierung verwendet werden).
END_CONNECTION_MAP Beendet die Definition einer Verbindungszuordnung (muss in der Klassenimplementierung verwendet werden).
CONNECTION_PART Gibt einen Verbindungspunkt in der Verbindungszuordnung des Steuerelements an.

Die folgenden Funktionen unterstützen eine Spüle beim Herstellen und Trennen einer Verbindung mithilfe von Verbindungspunkten:

Initialisierung/Beendigung von Verbindungspunkten

Name Beschreibung
AfxConnectionAdvise Stellt eine Verbindung zwischen einer Quelle und einer Spüle her.
AfxConnectionUnadvise Bricht eine Verbindung zwischen einer Quelle und einer Spüle auf.

BEGIN_CONNECTION_PART

Verwenden Sie das BEGIN_CONNECTION_PART Makro, um die Definition zusätzlicher Verbindungspunkte außerhalb der Verbindungspunkte für Ereignis- und Eigenschaftenbenachrichtigungen zu beginnen.

BEGIN_CONNECTION_PART(theClass, localClass)

Parameter

theClass Gibt den Namen der Steuerelementklasse an, deren Verbindungspunkt dies ist.

localClass Gibt den Namen der lokalen Klasse an, die den Verbindungspunkt implementiert.

Hinweise

Beginnen Sie in der Deklarationsdatei (.h), die die Memberfunktionen für Ihre Klasse definiert, den Verbindungspunkt mit dem BEGIN_CONNECTION_PART Makro. Fügen Sie dann das CONNECTION_IID Makro und alle anderen Memberfunktionen hinzu, die Sie implementieren möchten. Schließen Sie schließlich die Verbindungspunktzuordnung mit dem END_CONNECTION_PART Makro ab.

Anforderungen

Kopfball afxdisp.h

END_CONNECTION_PART

Beendet die Deklaration des Verbindungspunkts.

END_CONNECTION_PART(localClass)

Parameter

localClass
Gibt den Namen der lokalen Klasse an, die den Verbindungspunkt implementiert.

Anforderungen

Kopfball afxdisp.h

CONNECTION_IID

Verwenden Sie zwischen den Makros und END_CONNECTION_PART den BEGIN_CONNECTION_PART Makros eine Schnittstellen-ID für einen verbindungspunkt, der von Ihrem OLE-Steuerelement unterstützt wird.

CONNECTION_IID(iid)

Parameter

iid
Die Schnittstellen-ID der Schnittstelle, die vom Verbindungspunkt aufgerufen wird.

Hinweise

Das iid Argument ist eine Schnittstellen-ID, die verwendet wird, um die Schnittstelle zu identifizieren, die der Verbindungspunkt auf seinen verbundenen Senken aufruft. Zum Beispiel:

CONNECTION_IID(IID_ISampleSink)

Gibt einen Verbindungspunkt an, der die ISinkInterface Schnittstelle aufruft.

Anforderungen

Kopfball afxdisp.h

DECLARE_CONNECTION_MAP

Jede COleControlabgeleitete Klasse in Ihrem Programm kann eine Verbindungszuordnung bereitstellen, um zusätzliche Verbindungspunkte anzugeben, die ihr Steuerelement unterstützt.

DECLARE_CONNECTION_MAP()

Hinweise

Wenn Ihr Steuerelement zusätzliche Punkte unterstützt, verwenden Sie das DECLARE_CONNECTION_MAP Makro am Ende der Klassendeklaration. Verwenden Sie dann in der datei .cpp, die die Memberfunktionen für die Klasse definiert, das BEGIN_CONNECTION_MAP Makro, CONNECTION_PART Makros für die verbindungspunkte des Steuerelements und das END_CONNECTION_MAP Makro, um das Ende der Verbindungszuordnung zu deklarieren.

Anforderungen

Kopfball afxdisp.h

BEGIN_CONNECTION_MAP

Jede COleControlabgeleitete Klasse in Ihrem Programm kann eine Verbindungszuordnung bereitstellen, um Verbindungspunkte anzugeben, die ihr Steuerelement unterstützt.

BEGIN_CONNECTION_MAP(theClass, theBase)

Parameter

theClass
Gibt den Namen der Steuerelementklasse an, deren Verbindungszuordnung dies ist.

theBase
Gibt den Namen der Basisklasse von theClass.

Hinweise

Starten Sie in der Implementierungsdatei (.CPP), die die Memberfunktionen für Ihre Klasse definiert, die Verbindungszuordnung mit dem BEGIN_CONNECTION_MAP Makro, und fügen Sie dann Makroeinträge für jede Ihrer Verbindungspunkte mithilfe des CONNECTION_PART Makros hinzu. Schließen Sie schließlich die Verbindungszuordnung mit dem END_CONNECTION_MAP Makro ab.

Anforderungen

Kopfball afxdisp.h

END_CONNECTION_MAP

Beendet die Definition Der Verbindungszuordnung.

END_CONNECTION_MAP()

Anforderungen

Kopfball afxdisp.h

CONNECTION_PART

Ordnet ihrem OLE-Steuerelement einen Verbindungspunkt einer bestimmten Schnittstellen-ID zu.

CONNECTION_PART(theClass, iid, localClass)

Parameter

theClass
Gibt den Namen der Steuerelementklasse an, deren Verbindungspunkt dies ist.

iid
Die Schnittstellen-ID der Schnittstelle, die vom Verbindungspunkt aufgerufen wird.

localClass
Gibt den Namen der lokalen Klasse an, die den Verbindungspunkt implementiert.

Hinweise

Zum Beispiel:

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

implementiert eine Verbindungszuordnung mit einem Verbindungspunkt, der die IID_ISinkInterface Schnittstelle aufruft.

Anforderungen

Kopfball afxdisp.h

AfxConnectionAdvise

Rufen Sie diese Funktion auf, um eine Verbindung zwischen einer Quelle herzustellen, die durch , angegeben durch pUnkSrc, und einer Spüle, angegeben durch pUnkSink.

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

Parameter

pUnkSrc
Ein Zeiger auf das Objekt, das die Schnittstelle aufruft.

pUnkSink
Ein Zeiger auf das Objekt, das die Schnittstelle implementiert.

iid
Die Schnittstellen-ID der Verbindung.

bRefCount
Für Out-of-Process-Verbindungen muss dieser Parameter sein TRUEund gibt an, dass das Erstellen der Verbindung dazu führen soll, dass die Referenzanzahl pUnkSink erhöht wird.

Gibt für In-Process-Verbindungen an, dass das Erstellen der Verbindung dazu führen soll, TRUE dass die Referenzanzahl pUnkSink erhöht wird. FALSE gibt an, dass die Verweisanzahl nicht erhöht werden soll.

Warnung: Im Allgemeinen kann nicht vorhergesagt werden, welche Verbindungen im Prozess sind und welche Verbindungen außerhalb des Prozesses sind, daher wird empfohlen, diesen Parameter immer auf festzulegen TRUE.

pdwCookie
Ein Zeiger auf einen DWORD Ort, an dem ein Verbindungsbezeichner zurückgegeben wird. Dieser Wert sollte beim Trennen der Verbindung als dwCookie Parameter AfxConnectionUnadvise übergeben werden.

Rückgabewert

Nonzero, wenn eine Verbindung hergestellt wurde; andernfalls 0.

Beispiel

//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);

Anforderungen

Header: afxctl.h

AfxConnectionUnadvise

Rufen Sie diese Funktion auf, um eine Verbindung zwischen einer Quelle, angegeben durch pUnkSrc, und einer Spüle, angegeben durch pUnkSink.

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

Parameter

pUnkSrc
Ein Zeiger auf das Objekt, das die Schnittstelle aufruft.

pUnkSink
Ein Zeiger auf das Objekt, das die Schnittstelle implementiert.

iid
Die Schnittstellen-ID der Verbindungspunktschnittstelle.

bRefCount
Bei Out-of-Process-Verbindungen muss dieser Parameter sein TRUEund gibt an, dass das Erstellen der Verbindung dazu führen soll, dass die Referenzanzahl pUnkSink verringert wird.

Gibt für In-Process-Verbindungen an, dass das Erstellen der Verbindung dazu führen soll, TRUE dass die Verweisanzahl pUnkSink dekrementiert wird. FALSE gibt an, dass die Referenzanzahl nicht erhöht werden soll.

Warnung: Im Allgemeinen kann nicht vorhergesagt werden, welche Verbindungen im Prozess sind und welche Verbindungen außerhalb des Prozesses sind, daher wird empfohlen, diesen Parameter immer auf festzulegen TRUE.

dwCookie
Der verbindungsbezeichner, der von AfxConnectionAdvise.

Rückgabewert

Nonzero, wenn eine Verbindung getrennt wurde; andernfalls 0.

Beispiel

//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);

Anforderungen

Header: afxctl.h

Siehe auch

Makros und Globalen