Partage via


com_interface_entry (C++)

Ajoute une entrée d’interface dans la carte COM de la classe cible.

Syntaxe

[ com_interface_entry(
  com_interface_entry) ]

Paramètres

com_interface_entry
Chaîne contenant le texte réel de l’entrée. Pour obtenir la liste des valeurs possibles, consultez COM_INTERFACE_ENTRY Macros.

Notes

L’attribut com_interface_entry C++ insère le contenu non abrégé d’une chaîne de caractères dans la carte d’interface COM de l’objet cible. Si l’attribut est appliqué une fois à l’objet cible, l’entrée est insérée au début de la carte d’interface existante. Si l’attribut est appliqué à plusieurs reprises au même objet cible, les entrées sont insérées au début du mappage d’interface dans l’ordre dans lequel elles sont reçues.

Cet attribut exige que l’attribut coclass, progidou vi_progid (ou un autre attribut qui implique l’un de ceux-ci) soit également appliqué au même élément. Si un attribut unique est utilisé, les deux autres sont appliqués automatiquement. Par exemple, si progid elle est appliquée et coclassvi_progid appliquée également.

Étant donné que la première utilisation de com_interface_entry entraîne l’insertion de la nouvelle interface au début du mappage d’interface, il doit s’agir de l’un des types COM_INTERFACE_ENTRY suivants :

  • COM_INTERFACE_ENTRY

  • COM_INTERFACE_ENTRY_IID

  • COM_INTERFACE_ENTRY2

  • COM_INTERFACE_ENTRY2_IID

Des utilisations supplémentaires de l’attribut com_interface_entry peuvent utiliser tous les types de COM_INTERFACE_ENTRY pris en charge.

Cette restriction est nécessaire, car ATL utilise la première entrée dans le mappage d’interface comme identité IUnknown; par conséquent, l’entrée doit être une interface valide. Par exemple, l’exemple de code suivant n’est pas valide, car la première entrée dans le mappage d’interface ne spécifie pas d’interface COM réelle.

[ coclass, com_interface_entry =
    "COM_INTERFACE_ENTRY_NOINTERFACE(IDebugTest)"
]
   class CMyClass
   {
   };

Exemple

Le code suivant ajoute deux entrées à la carte d’interface COM existante de CMyBaseClass. La première est une interface standard, et la seconde masque l’interface IDebugTest .

// cpp_attr_ref_com_interface_entry.cpp
// compile with: /LD
#define _ATL_ATTRIBUTES
#include "atlbase.h"
#include "atlcom.h"

[module (name ="ldld")];

[ object,
  uuid("7dbebed3-d636-4917-af62-c767a720a5b9")]
__interface IDebugTest{};

[ object,
  uuid("2875ceac-f94b-4087-8e13-d13dc167fcfc")]
__interface IMyClass{};

[ coclass,
  com_interface_entry ("COM_INTERFACE_ENTRY (IMyClass)"),
  com_interface_entry ("COM_INTERFACE_ENTRY_NOINTERFACE(IDebugTest)"),
  uuid("b85f8626-e76e-4775-b6a0-4826a9e94af2")
]

class CMyClass: public IMyClass, public IDebugTest
{
};

Le mappage CMyBaseClass d’objets COM obtenu est le suivant :

BEGIN_COM_MAP(CMyClass)
    COM_INTERFACE_ENTRY (IMyClass)
    COM_INTERFACE_ENTRY_NOINTERFACE(IDebugTest)
    COM_INTERFACE_ENTRY(IMyClass)
    COM_INTERFACE_ENTRY2(IDispatch, IMyClass)
    COM_INTERFACE_ENTRY(IDebugTest)
    COM_INTERFACE_ENTRY(IProvideClassInfo)
END_COM_MAP()

Spécifications

Contexte d’attribut Value
S’applique à class, struct
Renouvelable Oui
Attributs requis Un ou plusieurs des éléments suivants : coclass, progidou vi_progid.
Attributs non valides Aucun

Pour plus d'informations sur les contextes d'attribut, consultez Contextes d'attribut.

Voir aussi

Attributs COM
Attributs de classe
Attributs Typedef, Enum, Union et Struct