Partager via


Tables de connexions

Les contrôles OLE peuvent exposer des interfaces à d’autres applications. Ces interfaces autorisent uniquement l’accès à partir d’un conteneur dans ce contrôle. Si un contrôle OLE souhaite accéder aux interfaces externes d’autres objets OLE, un point de connexion doit être établi. Ce point de connexion permet un accès sortant de contrôle aux cartes de répartition externes, telles que les mappages d’événements ou les fonctions de notification.

La bibliothèque de classes Microsoft Foundation offre un modèle de programmation qui prend en charge les points de connexion. Dans ce modèle, les « cartes de connexion » sont utilisées pour désigner des interfaces ou des points de connexion pour le contrôle OLE. Les cartes de connexion contiennent une macro pour chaque point de connexion. Pour plus d’informations sur les cartes de connexion, consultez la CConnectionPoint classe.

En règle générale, un contrôle prend en charge seulement deux points de connexion : un pour les événements et un pour les notifications de propriétés. Celles-ci sont implémentées par la COleControl classe de base et ne nécessitent aucun travail supplémentaire par l’enregistreur de contrôle. Tous les autres points de connexion que vous souhaitez implémenter dans votre classe doivent être ajoutés manuellement. Pour prendre en charge les cartes de connexion et les points, MFC fournit les macros suivantes :

Déclaration de carte de connexion et démarcation

Nom Description
BEGIN_CONNECTION_PART Déclare une classe incorporée qui implémente un point de connexion supplémentaire (doit être utilisée dans la déclaration de classe).
END_CONNECTION_PART Termine la déclaration d’un point de connexion (doit être utilisée dans la déclaration de classe).
CONNECTION_IID Spécifie l’ID d’interface du point de connexion du contrôle.
DECLARE_CONNECTION_MAP Déclare qu’un mappage de connexion sera utilisé dans une classe (doit être utilisé dans la déclaration de classe).
BEGIN_CONNECTION_MAP Commence la définition d’un mappage de connexion (doit être utilisée dans l’implémentation de classe).
END_CONNECTION_MAP Termine la définition d’une carte de connexion (doit être utilisée dans l’implémentation de classe).
CONNECTION_PART Spécifie un point de connexion dans la carte de connexion du contrôle.

Les fonctions suivantes aident un récepteur à établir et à déconnecter une connexion à l’aide de points de connexion :

Initialisation/arrêt des points de connexion

Nom Description
AfxConnectionAdvise Établit une connexion entre une source et un récepteur.
AfxConnectionUnadvise Interrompt une connexion entre une source et un récepteur.

BEGIN_CONNECTION_PART

Utilisez la BEGIN_CONNECTION_PART macro pour commencer la définition de points de connexion supplémentaires au-delà des points de connexion d’événement et de notification de propriété.

BEGIN_CONNECTION_PART(theClass, localClass)

Paramètres

theClass Spécifie le nom de la classe de contrôle dont il s’agit du point de connexion.

localClass Spécifie le nom de la classe locale qui implémente le point de connexion.

Notes

Dans le fichier de déclaration (.h) qui définit les fonctions membres de votre classe, démarrez le point de connexion avec la BEGIN_CONNECTION_PART macro. Ajoutez ensuite la CONNECTION_IID macro et toutes les autres fonctions membres que vous souhaitez implémenter. Enfin, terminez la carte des points de connexion avec la END_CONNECTION_PART macro.

Spécifications

En-tête afxdisp.h

END_CONNECTION_PART

Termine la déclaration de votre point de connexion.

END_CONNECTION_PART(localClass)

Paramètres

localClass
Spécifie le nom de la classe locale qui implémente le point de connexion.

Spécifications

En-tête afxdisp.h

CONNECTION_IID

Utilisez entre les macros et END_CONNECTION_PART les BEGIN_CONNECTION_PART macros pour définir un ID d’interface pour un point de connexion pris en charge par votre contrôle OLE.

CONNECTION_IID(iid)

Paramètres

iid
ID d’interface de l’interface appelée par le point de connexion.

Notes

L’argument iid est un ID d’interface utilisé pour identifier l’interface que le point de connexion appelle sur ses récepteurs connectés. Par exemple :

CONNECTION_IID(IID_ISampleSink)

Spécifie un point de connexion qui appelle l’interface ISinkInterface .

Spécifications

En-tête afxdisp.h

DECLARE_CONNECTION_MAP

Chaque COleControlclasse dérivée de votre programme peut fournir un mappage de connexion pour spécifier des points de connexion supplémentaires pris en charge par votre contrôle.

DECLARE_CONNECTION_MAP()

Notes

Si votre contrôle prend en charge des points supplémentaires, utilisez la DECLARE_CONNECTION_MAP macro à la fin de votre déclaration de classe. Ensuite, dans le fichier .cpp qui définit les fonctions membres de la classe, utilisez la BEGIN_CONNECTION_MAP macro, CONNECTION_PART les macros pour chacun des points de connexion du contrôle et la END_CONNECTION_MAP macro pour déclarer la fin du mappage de connexion.

Spécifications

En-tête afxdisp.h

BEGIN_CONNECTION_MAP

Chaque COleControlclasse dérivée de votre programme peut fournir un mappage de connexion pour spécifier les points de connexion pris en charge par votre contrôle.

BEGIN_CONNECTION_MAP(theClass, theBase)

Paramètres

theClass
Spécifie le nom de la classe de contrôle dont la carte de connexion est définie.

theBase
Spécifie le nom de la classe de base de theClass.

Notes

Dans le fichier d’implémentation (.CPP) qui définit les fonctions membres de votre classe, démarrez le mappage de connexion avec la BEGIN_CONNECTION_MAP macro, puis ajoutez des entrées de macro pour chacun de vos points de connexion à l’aide de la CONNECTION_PART macro. Enfin, terminez la carte de connexion avec la END_CONNECTION_MAP macro.

Spécifications

En-tête afxdisp.h

END_CONNECTION_MAP

Termine la définition de votre carte de connexion.

END_CONNECTION_MAP()

Spécifications

En-tête afxdisp.h

CONNECTION_PART

Mappe un point de connexion pour votre contrôle OLE à un ID d’interface spécifique.

CONNECTION_PART(theClass, iid, localClass)

Paramètres

theClass
Spécifie le nom de la classe de contrôle dont il s’agit du point de connexion.

iid
ID d’interface de l’interface appelée par le point de connexion.

localClass
Spécifie le nom de la classe locale qui implémente le point de connexion.

Notes

Par exemple :

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

implémente une carte de connexion, avec un point de connexion, qui appelle l’interface IID_ISinkInterface .

Spécifications

En-tête afxdisp.h

AfxConnectionAdvise

Appelez cette fonction pour établir une connexion entre une source, spécifiée par pUnkSrc, et un récepteur, spécifié par pUnkSink.

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

Paramètres

pUnkSrc
Pointeur vers l’objet qui appelle l’interface.

pUnkSink
Pointeur vers l’objet qui implémente l’interface.

iid
ID d’interface de la connexion.

bRefCount
Pour les connexions hors processus, ce paramètre doit être TRUE, et indique que la création de la connexion doit entraîner l’incrémentation du nombre de pUnkSink références.

Pour les connexions in-process, TRUE indique que la création de la connexion doit entraîner l’incrémentation du nombre de pUnkSink références. FALSE indique que le nombre de références ne doit pas être incrémenté.

Avertissement : en général, il ne peut pas être prédit les connexions en cours et les connexions hors processus. Il est donc recommandé de toujours définir ce paramètre TRUEsur .

pdwCookie
Pointeur vers un DWORD emplacement où un identificateur de connexion est retourné. Cette valeur doit être transmise en tant que dwCookie paramètre lors AfxConnectionUnadvise de la déconnexion de la connexion.

Valeur de retour

Différent de zéro si une connexion a été établie ; sinon 0.

Exemple

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

Spécifications

En-tête : afxctl.h

AfxConnectionUnadvise

Appelez cette fonction pour déconnecter une connexion entre une source, spécifiée par pUnkSrc, et un récepteur, spécifié par pUnkSink.

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

Paramètres

pUnkSrc
Pointeur vers l’objet qui appelle l’interface.

pUnkSink
Pointeur vers l’objet qui implémente l’interface.

iid
ID d’interface de l’interface du point de connexion.

bRefCount
Pour les connexions hors processus, ce paramètre doit être TRUE, et indique que la création de la connexion doit entraîner la décrémentation du nombre de pUnkSink références.

Pour les connexions in-process, TRUE indique que la création de la connexion doit entraîner la décrémentation du nombre de pUnkSink références. FALSE indique que le nombre de références ne doit pas être décrémenté.

Avertissement : en général, il ne peut pas être prédit les connexions en cours et les connexions hors processus. Il est donc recommandé de toujours définir ce paramètre TRUEsur .

dwCookie
Identificateur de connexion retourné par AfxConnectionAdvise.

Valeur retournée

Différent de zéro si une connexion a été déconnectée ; sinon 0.

Exemple

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

Spécifications

En-tête : afxctl.h

Voir aussi

Macros et globals