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 COleControl
classe 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 COleControl
classe 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 TRUE
sur .
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 TRUE
sur .
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