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 COleControl
abgeleitete 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 COleControl
abgeleitete 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 TRUE
und 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 TRUE
und 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