dispinterface (attribut)

L’instruction dispinterface définit un ensemble de propriétés et de méthodes sur lesquelles vous pouvez appeler IDispatch::Invoke. Une dispinterface peut être définie en répertoriant explicitement l’ensemble des méthodes et propriétés prises en charge (Syntaxe 1), ou en listant une interface unique (Syntaxe 2).

[
    [attributes]
]
dispinterface dispinterface-name
{
    properties:
        property-list
    methods:
        method-list
};

[
  [attributes]
]
dispinterface dispinterface-name
{
    interface interface-name
};

Paramètres

attributes

Spécifie les attributs qui s’appliquent à l’ensemble de la dispinterface. Les attributs suivants sont acceptés : [helpstring], [helpcontext], [helpfile], [hidden], [nonextensible], [oleautomation], [restricted], [uuid] et [version].

dispinterface-name

Nom sous lequel la dispinterface est connue dans la bibliothèque de types. Ce nom doit être unique dans la bibliothèque de types.

property-list

(Syntaxe 1) Liste facultative des propriétés prises en charge par l’objet, déclarée sous la forme de variables. Il s’agit de la forme abrégée permettant de déclarer les fonctions de propriété dans la liste des méthodes. Pour plus d’informations, consultez la section commentaires.

method-list

(Syntaxe 1) Liste comprenant un prototype de fonction pour chaque méthode et propriété dans la dispinterface. N’importe quel nombre de définitions de fonction peut apparaître dans la méthliste. Une fonction dans méthliste se présente sous la forme suivante :

[attributs]returntype méthname type paramname(params);

Les attributs suivants sont acceptés sur une méthode dans une dispinterface : [helpstring], [helpcontext], [propget], [propput], [propputref], [string] et [vararg]. Si [vararg] est spécifié, le dernier paramètre doit être un tableau sécurisé de type VARIANT .

La liste de paramètres est une liste délimitée par des virgules, dont chaque élément a la forme suivante :

[attributs]

Le type peut être n’importe quel type déclaré ou intégré, ou un pointeur vers n’importe quel type. Les attributs sur les paramètres sont les suivants :

[in], [out], [optional], [string]

nom_interface

(Syntaxe 2) Nom de l’interface à déclarer en tant qu’interface IDispatch.

Notes

Le compilateur MIDL accepte le classement des paramètres suivant (de gauche à droite) :

  1. Paramètres obligatoires (paramètres qui n’ont pas les attributs [valeur par défaut] ou [facultatif]),
  2. paramètres facultatifs avec ou sans l’attribut [defaultvalue],
  3. avec l’attribut [facultatif] et sans l’attribut [defaultvalue],
  4. [ lcid] paramètre, le cas échéant,
  5. [ retval] paramètre

Les fonctions de méthode sont spécifiées exactement comme décrit dans la page de référence du module , sauf que l’attribut [ entrée] n’est pas autorisé. Notez que STDOLE32. TLB (STDOLE. TLB sur les systèmes 16 bits) doit être importé, car une dispinterface hérite d’IDispatch.

Vous pouvez déclarer des propriétés dans les listes de propriétés ou de méthodes. La déclaration de propriétés dans la liste des propriétés n’indique pas le type d’accès pris en charge par la propriété (c’est-à-dire get, put ou putref). Spécifiez l’attribut [ readonly] pour les propriétés qui ne prennent pas en charge put ou putref. Si vous déclarez les fonctions de propriété dans la liste des méthodes, les fonctions d’une propriété ont toutes le même identificateur.

À l’aide de la première syntaxe, les balises propriétés : et méthodes : sont requises. L’attribut [ id] est également requis sur chaque membre. Exemple :

properties: 
    [id(0)] int Value;    // Default property. 
methods: 
    [id(1)] HRESULT Show();

Contrairement aux membres d’interface, les membres dispinterface ne peuvent pas utiliser l’attribut retval pour retourner une valeur en plus d’un code d’erreur HRESULT. L’attribut [ lcid] n’est pas non plus valide pour les dispinterfaces, car IDispatch::Invoke passe un LCID. Toutefois, il est possible de redéclarer une interface qui utilise ces attributs.

À l’aide de la deuxième syntaxe, les interfaces qui prennent en charge IDispatch et qui sont déclarées précédemment dans un script ODL peuvent être rede déclarées en tant qu’interfaces IDispatch comme suit :

dispinterface helloPro 
{ 
    interface hello; 
};

L’exemple précédent déclare tous les membres de hello et tous les membres dont hello hérite comme prenant en charge IDispatch. Dans ce cas, si hello a été déclaré précédemment avec des membres [lcid] et [retval] qui ont retourné des HRESULT, MkTypLib supprime chaque paramètre [lcid] et le type de retour HRESULT, et marque plutôt le type de retour comme celui du paramètre [retval].

Notes

L’outil Mktyplib.exe est obsolète. Utilisez le compilateur MIDL à la place.

 

Les propriétés et méthodes d’un dispinterface ne font pas partie du VTBL de la dispinterface. Par conséquent, CreateStdDispatch et DispInvoke ne peuvent pas être utilisés pour implémenter IDispatch::Invoke. La dispinterface est utilisée lorsqu’une application doit exposer des fonctions non VTBL existantes via Automation. Ces applications peuvent implémenter IDispatch::Invoke en examinant le paramètre dispidMember et en appelant directement la fonction correspondante.

Exemples

[ 
    uuid(1e196b20-1f3c-1069-996b-00dd010fe676), 
    version(1.0), 
    helpstring("Useful help string."), 
    helpcontext(2480)
] 
dispinterface MyDispatchObject 
{ 
    properties: 
        [id(1)] int x;    //An integer property named x 
        [id(2)] BSTR y;   //A string property named y 
    methods: 
        [id(3)] HRESULT show();    //No arguments, no result 
        [id(11)] int computeit(int inarg, double *outarg); 
}; 
 
[
    uuid(1e123456-1f3c-1069-996b-00dd010fe676)
] 
dispinterface MyObject 
{ 
    properties: 
    methods: 
        [id(1), propget, bindable, defaultbind, displaybind] long x(); 
 
        [id(1), propput, bindable, defaultbind, 
         displaybind] HRESULT x(long rhs); 
}

Voir aussi

bindable

defaultbind

displaybind

helpcontext

helpfile

helpstring

Cachés

Dans

Interface

TYPEFLAGS

Syntaxe de fichier ODL

Exemple de fichier ODL

Génération d’une bibliothèque de types avec MIDL

Optionnel

out

nonextensible

propget

propput

propputref

oleautomation

Restreint

String

uuid

vararg

Version