Partager via


attribut d'objet

L’attribut d’interface [objet] identifie une interface COM. (Une liste d’attributs d’interface qui n’inclut pas l’attribut [objet] indique une interface RPC DCE.)

[ 
    object, 
    uuid(string-uuid)
    [ , interface-attribute-list] 
] 
interface interface-name : base-interface
{
...    
}

Paramètres

string-uuid

Chaîne UUID générée par l’utilitaire Uuidgen. Vous pouvez placer la chaîne UUID entre guillemets.

interface-attribute-list

Autres attributs qui s’appliquent à l’interface dans son ensemble.

nom_interface

Nom de l’interface.

interface de base

Interface COM dont cette interface dérive. L’interface de base doit être IUnknown, IDispatch ou une autre interface COM qui dérive, directement ou indirectement, d’IUnknown ou IDispatch.

Notes

Une liste d’attributs d’interface pour une interface COM doit inclure l’attribut [uuid], mais elle ne peut pas inclure l’attribut[version].

Par défaut, la compilation d’une interface COM avec le compilateur MIDL génère les fichiers nécessaires à la création d’une DLL proxy. Cette DLL contient le code pour prendre en charge l’utilisation de l’interface COM personnalisée par les applications clientes et les serveurs d’objets. Toutefois, si la liste d’attributs d’interface pour une interface COM spécifie l’attribut [local], le compilateur MIDL génère uniquement le fichier d’en-tête d’interface.

Le compilateur MIDL génère automatiquement un type de données d’interface pour une interface COM. Vous pouvez également utiliser typedef avec l’interface mot clé pour définir explicitement un type de données d’interface. La spécification d’interface peut ensuite utiliser le type de données d’interface dans les paramètres de fonction et retourner des valeurs, des membres struct et union , et d’autres déclarations de type. L’exemple suivant illustre l’utilisation d’un type de données IStream généré automatiquement :

[
    object, 
    uuid (ABCDEFOO-1234-1234-5678-ABCDEF123456)
] 
interface IStream : IUnknown
{ 
    typedef IStream * LPSTREAM; 
    // Other interface definition statements.
}

Dans une interface COM, toutes les fonctions membres de l’interface sont supposées être des fonctions virtuelles. Une fonction virtuelle a un pointeur implicite comme premier paramètre. La table de fonctions virtuelles contient une entrée pour chaque fonction membre de l’interface.

Les fonctions membres de l’interface d’objet non[local] doivent avoir une valeur de retour HRESULT ou SCODE. (Notez que les versions antérieures de MIDL autorisant les fonctions membres à retourner void. Toutefois, à compter de MIDL version 3.0, le renvoi d’void génère une erreur du compilateur.) Avoir une valeur de retour HRESULT ou SCODE signifie que si une exception est générée pendant un appel distant, les proxys générés interceptent l’exception et retournent le code d’exception dans la valeur de retour. Si votre application peut se permettre d’ignorer les erreurs qui se produisent lors d’un appel de procédure distante, vous pouvez spécifier HRESULT comme type de retour sans vérifier la valeur de retour après l’appel.

Si vous recompilez une ancienne application, la modification des types de retour peut entraîner des problèmes de compatibilité descendante lorsque le serveur envoie le résultat nouvellement introduit au client. En guise d’alternative à la modification du type de retour, vous pouvez étiqueter la fonction qui retourne void avec l’attribut [call_as], ce qui en fait une fonction locale. Définissez ensuite une fonction distante associée avec les mêmes paramètres, mais avec le type de retour HRESULT. La fonction locale peut déclencher une exception en fonction de cette valeur HRESULT, si nécessaire.

L’attribut [object] n’est pas disponible lorsque vous compilez à l’aide du commutateur /osf du compilateur MIDL.

Exemples

[
    uuid(12345678-1234-1234-1234-123456789ABC), 
    object
] 
interface IMyInterface : IUnknown
{
    // Interface definition statements.
}

[
    uuid(87654321-1234-1234-1234-123456789ABC), 
    object, 
    local
] 
interface ILocalInterface : ISomeOldCOMInterface
{
    // Interface definition statements.
}

Voir aussi

call_as

Fichier de définition d’interface (IDL)

iid_is

Interface

Local

/Osf

Typedef

uuid

Version