Anslutningskartor

Anmärkning

Biblioteket För Microsoft Foundation-klasser (MFC) stöds fortfarande. Vi lägger dock inte längre till funktioner eller uppdaterar dokumentationen.

OLE-kontroller kan exponera gränssnitt för andra program. Dessa gränssnitt tillåter endast åtkomst från en container till den kontrollen. Om en OLE-kontroll vill komma åt externa gränssnitt för andra OLE-objekt måste en anslutningspunkt upprättas. Den här anslutningspunkten tillåter en kontroll av utgående åtkomst till externa sändningskartor, till exempel händelsekartor eller meddelandefunktioner.

Microsoft Foundation-klassbiblioteket erbjuder en programmeringsmodell som stöder anslutningspunkter. I den här modellen används "anslutningskartor" för att ange gränssnitt eller anslutningspunkter för OLE-kontrollen. Anslutningskartor innehåller ett makro för varje anslutningspunkt. Mer information om anslutningskartor finns i CConnectionPoint klassen .

Vanligtvis stöder en kontroll bara två anslutningspunkter: en för händelser och en för egenskapsmeddelanden. Dessa implementeras av basklassen COleControl och kräver inget extra arbete av kontrollskrivaren. Alla andra anslutningsplatser som du vill implementera i klassen måste läggas till manuellt. För att stödja anslutningskartor och -punkter tillhandahåller MFC följande makron:

Deklaration och avgränsning av anslutningskarta

Namn Description
BEGIN_CONNECTION_PART Deklarerar en inbäddad klass som implementerar ytterligare en anslutningspunkt (måste användas i klassdeklarationen).
END_CONNECTION_PART Avslutar deklarationen för en anslutningspunkt (måste användas i klassdeklarationen).
CONNECTION_IID Anger gränssnitts-ID för kontrollens anslutningspunkt.
DECLARE_CONNECTION_MAP Deklarerar att en anslutningskarta ska användas i en klass (måste användas i klassdeklarationen).
BEGIN_CONNECTION_MAP Börjar definitionen av en anslutningskarta (måste användas i klassimplementeringen).
END_CONNECTION_MAP Avslutar definitionen av en anslutningskarta (måste användas i klassimplementeringen).
CONNECTION_PART Anger en anslutningspunkt i kontrollens anslutningskarta.

Följande funktioner hjälper en mottagare att upprätta och koppla från en anslutning med hjälp av anslutningspunkter:

Initiering/avslutning av anslutningspunkter

Namn Description
AfxConnectionAdvise Upprättar en anslutning mellan en källa och en mottagare.
AfxConnectionUnadvise Bryter en anslutning mellan en källa och en mottagare.

BEGIN_CONNECTION_PART

Använd makrot BEGIN_CONNECTION_PART för att börja definiera ytterligare anslutningspunkter utöver anslutningspunkterna för händelse- och egenskapsmeddelanden.

BEGIN_CONNECTION_PART(theClass, localClass)

Parameterar

theClass Anger namnet på kontrollklassen vars anslutningspunkt detta är.

localClass Anger namnet på den lokala klass som implementerar anslutningspunkten.

Anmärkningar

Starta anslutningspunkten med makrot i deklarationsfilen (.h) som definierar medlemsfunktionerna BEGIN_CONNECTION_PART för klassen. Lägg sedan till makrot CONNECTION_IID och andra medlemsfunktioner som du vill implementera. Slutför slutligen anslutningspunktskartan med makrot END_CONNECTION_PART .

Kravspecifikation

Huvudetafxdisp.h

END_CONNECTION_PART

Avslutar deklarationen av anslutningspunkten.

END_CONNECTION_PART(localClass)

Parameterar

localClass
Anger namnet på den lokala klass som implementerar anslutningspunkten.

Kravspecifikation

Huvudetafxdisp.h

CONNECTION_IID

Använd mellan makrona BEGIN_CONNECTION_PART och END_CONNECTION_PART för att definiera ett gränssnitts-ID för en anslutningspunkt som stöds av ole-kontrollen.

CONNECTION_IID(iid)

Parameterar

iid
Gränssnitts-ID:t för gränssnittet som anropas av anslutningspunkten.

Anmärkningar

Argumentet iid är ett gränssnitts-ID som används för att identifiera det gränssnitt som anslutningspunkten anropar på dess anslutna mottagare. Till exempel:

CONNECTION_IID(IID_ISampleSink)

Anger en anslutningspunkt som anropar ISinkInterface gränssnittet.

Kravspecifikation

Huvudetafxdisp.h

DECLARE_CONNECTION_MAP

Varje COleControl-härledd klass i ditt program kan tillhandahålla en anslutningskarta för att ange ytterligare anslutningspunkter som din kontroll stöder.

DECLARE_CONNECTION_MAP()

Anmärkningar

Om kontrollen stöder ytterligare punkter använder du makrot DECLARE_CONNECTION_MAP i slutet av klassdeklarationen. I filen .cpp som definierar medlemsfunktionerna för klassen använder BEGIN_CONNECTION_MAP du sedan makrot, CONNECTION_PART makrona för var och en av kontrollens anslutningspunkter och makrot END_CONNECTION_MAP för att deklarera slutet på anslutningskartan.

Kravspecifikation

Huvudetafxdisp.h

BEGIN_CONNECTION_MAP

Varje COleControl-härledd klass i ditt program kan tillhandahålla en anslutningskarta för att ange anslutningspunkter som din kontroll stöder.

BEGIN_CONNECTION_MAP(theClass, theBase)

Parameterar

theClass
Anger namnet på kontrollklassen vars anslutningsöversikt detta är.

theBase
Anger namnet på basklassen för theClass.

Anmärkningar

I implementeringsfilen (.CPP) som definierar medlemsfunktionerna för klassen startar du anslutningskartan med makrot BEGIN_CONNECTION_MAP och lägger sedan till makroposter för var och en av dina anslutningspunkter med hjälp av makrot CONNECTION_PART . Slutför slutligen anslutningskartan med makrot END_CONNECTION_MAP .

Kravspecifikation

Huvudetafxdisp.h

END_CONNECTION_MAP

Avslutar definitionen av anslutningskartan.

END_CONNECTION_MAP()

Kravspecifikation

Huvudetafxdisp.h

CONNECTION_PART

Mappar en anslutningspunkt för ole-kontrollen till ett specifikt gränssnitts-ID.

CONNECTION_PART(theClass, iid, localClass)

Parameterar

theClass
Anger namnet på kontrollklassen vars anslutningspunkt detta är.

iid
Gränssnitts-ID:t för gränssnittet som anropas av anslutningspunkten.

localClass
Anger namnet på den lokala klass som implementerar anslutningspunkten.

Anmärkningar

Till exempel:

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

implementerar en anslutningskarta med en anslutningspunkt som anropar IID_ISinkInterface gränssnittet.

Kravspecifikation

Huvudetafxdisp.h

AfxConnectionAdvise

Anropa den här funktionen för att upprätta en anslutning mellan en källa som anges av pUnkSrc, och en mottagare, som anges av pUnkSink.

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

Parameterar

pUnkSrc
En pekare till objektet som anropar gränssnittet.

pUnkSink
En pekare till objektet som implementerar gränssnittet.

iid
Gränssnittets ID för anslutningen.

bRefCount
För out-of-process-anslutningar måste den här parametern vara TRUE, och anger att om du skapar anslutningen bör referensantalet pUnkSink ökas.

För pågående anslutningar TRUE anger att skapandet av pUnkSink anslutningen ska göra att referensantalet ökas. FALSE anger att referensantalet inte ska ökas.

Varning! I allmänhet går det inte att förutsäga vilka anslutningar som är i processen och vilka anslutningar som är inaktiva, så vi rekommenderar att du alltid anger den här parametern till TRUE.

pdwCookie
En pekare till en DWORD där en anslutningsidentifierare returneras. Det här värdet ska skickas som parameter till dwCookieAfxConnectionUnadvise när anslutningen kopplas från.

Returvärde

Nonzero om en anslutning upprättades. annars 0.

Example

//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, TRUE, &dwCookie);

Kravspecifikation

Rubrik:afxctl.h

AfxConnectionUnadvise

Anropa den här funktionen för att koppla från en anslutning mellan en källa som anges av pUnkSrc, och en mottagare som anges av pUnkSink.

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

Parameterar

pUnkSrc
En pekare till objektet som anropar gränssnittet.

pUnkSink
En pekare till objektet som implementerar gränssnittet.

iid
Gränssnitts-ID för anslutningspunktsgränssnittet.

bRefCount
För out-of-process-anslutningar måste den här parametern vara TRUE, och anger att om du skapar anslutningen bör referensantalet pUnkSink minskas.

För pågående anslutningar TRUE anger att om du skapar anslutningen bör referensantalet pUnkSink minskas. FALSE anger att referensantalet inte ska minskas.

Varning! I allmänhet går det inte att förutsäga vilka anslutningar som är i processen och vilka anslutningar som är inaktiva, så vi rekommenderar att du alltid anger den här parametern till TRUE.

dwCookie
Anslutningsidentifieraren som returneras av AfxConnectionAdvise.

Returvärde

Nonzero om en anslutning har kopplats från. annars 0.

Example

//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, TRUE, dwCookie);

Kravspecifikation

Rubrik:afxctl.h

Se även

makron och globala