Ces macros entrent les interfaces d'un objet dans sa carte COM afin qu'ils soient accessibles par QueryInterface. L'ordre des entrées dans la carte COM est que les interfaces de commande seront vérifiées lors de QueryInterface pour une correspondance IID.
Chaque objet qui souhaite exposer ses interfaces via QueryInterface doit avoir sa propre carte de COM. La carte COM commence avec la macro BEGIN_COM_MAP. Interface entrées sont ajoutées avec une ou plusieurs des macros COM_INTERFACE_ENTRY , et la carte est terminée avec la macro END_COM_MAP . Par exemple:
BEGI&N_COM_MAP(CMyObject)
nbsp ; COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IMyObject)
END_COM_MAP)
Voir la bibliothèque ATL COMMAP échantillon d'exemples à l'aide de différents types de COM carte macros d'entrée.
Notez que la première entrée dans le mappage COM doit être une interface sur l'objet contenant la carte COM. Donc, impossible de démarrer vos entrées de carte COM avec COM_INTERFACE_ENTRY_CHAIN, qui provoque la carte COM d'un objet différent à fouiller au point où COM_INTERFACE_ENTRY_CHAIN (COtherObject) apparaît dans la carte de votre objet COM. Si vous voulez la carte COM d'un autre objet de la recherche tout d'abord, ajouter une interface d'IUnknown dans votre carte COM, puis la chaîne carte de COM de l'autre objet. Par exemple:
BEGI&N_COM_MAP(CThisObject)
nbsp ; COM_INTERFACE_ENTRY(IUnknown)
COM_INTERFACE_ENTRY_CHAIN(COtherObject)
END_COM_MAP)
Prudence nbsp ; De la version 3.0, ATL utilise le mot clé compilateur __uuidof ( classe ) pour obtenir l'IID correspondant à une classe donnée. En raison des modifications dans les macros COM_I&NTERFACE_ENTRY efficaces dans la version 3.0, maintenant vous simplement inclure l'en-tête de l'interface à utiliser, au lieu de relier aussi dans une bibliothèque qui définit les correspondance IID pour cette interface. Ce changement peut entraîner des problèmes si l'en-tête a déjà généré par une version plus ancienne de MIDL, ou s'il a été codé à la main et pas marqué de façon appropriée. Si la déclaration de l'interface dans l'en-tête n'a pas été marquée avec un associé __declspec ( uuid ), alors toute tentative d'utiliser le mot clé __uuidof pour cette interface échouera. Vous pouvez revenir aux anciennes macros COM_INTERFACE_ENTRY (ATL 2.x) en définissant _ATL_NO_UUIDOF dans vos paramètres de génération pour contourner des problèmes avec ce nouveau comportement.
Voici les macros d'entrée disponibles:
COM carte entrée Macros
Les Macros ATL et fonctions globales