dual (attribut)
L’attribut double identifie une interface qui expose des propriétés et des méthodes via IDispatch et directement via le VTBL.
[
uuid(uuid-number),
oleautomation,
dual
[ , optional-attribute-list]
]
interface interface-name
{
. . .
};
-
uuid-number
-
Spécifie un numéro d’identification universel unique pour l’interface
-
optional-attribute-list
-
Spécifie une liste de zéro ou plusieurs attributs MIDL supplémentaires.
-
nom_interface
-
Nom de l’interface à laquelle l’attribut double sera appliqué.
Les interfaces identifiées par l’attribut double doivent être compatibles avec Automation et dérivées d’IDispatch. Cet attribut n’est pas autorisé sur les dispinterfaces.
L’attribut double crée une interface qui est à la fois une interface IDispatch et une interface COM (Component Object Model). Les sept premières entrées du VTBL pour une interface double sont les sept membres d’IDispatch, et les autres entrées concernent l’accès direct aux membres de l’interface double. Tous les paramètres et types de retour spécifiés pour les membres d’une interface double doivent être des types compatibles avec Automation.
Tous les membres d’une interface double doivent passer un HRESULT comme valeur de retour de fonction. Les membres, tels que les fonctions d’accesseur de propriété, qui doivent retourner d’autres valeurs, doivent spécifier le dernier paramètre out, retval, indiquant un paramètre de sortie qui retourne la valeur de la fonction. En outre, les membres qui doivent prendre en charge plusieurs paramètres régionaux doivent passer un paramètre lcid .
Une interface double offre à la fois la vitesse de liaison VTBL directe et la flexibilité de la liaison IDispatch . Pour cette raison, les interfaces doubles sont recommandées dans la mesure du possible.
Notes
Si votre application accède aux données d’objet en castant ce pointeur dans l’appel d’interface, vous devez case activée les pointeurs VTBL dans l’objet par rapport à vos propres pointeurs VTBL pour vous assurer que vous êtes connecté au proxy approprié.
La spécification du double sur une interface implique que l’interface est compatible avec Automation, ce qui entraîne la définition des indicateurs de TYPEFLAG_FDUAL et de TYPEFLAG_FOLEAUTOMATION.
TYPEFLAG_FDUAL, TYPEFLAG_FOLEAUTOMATION
[
uuid(1e196b20-1f3c-1069-996b-00dd010fe676),
oleautomation, dual
]
interface IHello : IDispatch
{
//Diverse properties and methods defined here.
};