async_uuid (attribut)
L’attribut d’interface [async_uuid] indique au compilateur MIDL de définir les versions synchrones et asynchrones d’une interface COM.
[
object,
uuid(string-uuid1),
async_uuid(string-uuid2)[ [, interface-attribute-list]
]
interface interface-name : base-interface
{
interface-definition
}
-
string-uuid1
-
Chaîne UUID, générée par l’utilitaire Uuidgen, qui identifie la version synchrone de l’interface.
-
string-uuid2
-
Chaîne UUID, générée par l’utilitaire Uuidgen, qui identifie la version asynchrone de l’interface.
-
interface-attribute-list
-
Autres attributs qui s’appliquent à l’interface dans son ensemble. Vous ne pouvez pas utiliser l’attribut [version] dans une interface COM.
-
nom_interface
-
Nom de l’interface.
-
interface de base
-
Interface à partir de laquelle cette interface dérive. L’interface de base doit être IUnknown ou une interface asynchrone qui dérive, directement ou indirectement, d’IUnknown.
-
définition d’interface
-
Spécifie les instructions IDL qui forment la définition de l’interface.
L’utilisation de cet attribut nécessite Windows 2000 ou versions ultérieures de Windows.
Lorsque vous appliquez l’attribut [async_uuid] à une interface COM (autrement dit, une interface qui a l’attribut [object] ), le compilateur MIDL génère une définition asynchrone de l’interface, en plus de la version synchrone traditionnelle. L’interface asynchrone aura les mêmes noms que l’interface synchrone, mais avec un préfixe « Async ». L’identificateur d’interface (IID) est l’UUID spécifié en tant que paramètre de l’attribut [async_uuid].
Pour l’interface asynchrone, MIDL fractionne chaque méthode en méthodes de début et de fin distinctes. La méthode begin a le nom de la méthode synchrone avec un préfixe « Begin_ » et inclut tous les paramètres [in] de la méthode synchrone. La méthode finish a le nom de la méthode synchrone avec un préfixe « Finish_ » et inclut tous les paramètres [out] de la méthode synchrone. Si la méthode synchrone a des paramètres [in, out], ils seront inclus dans les méthodes asynchrones de début et de fin .
Si une méthode d’interface asynchrone a l’attribut [call_as], MIDL génère des déclarations pour les méthodes begin et finish . Vous devez implémenter les deux méthodes.
Chaque interface asynchrone est un modificateur sur une interface synchrone et, en tant que telle, n’a pas de graphe d’héritage distinct. Cela signifie que vous ne pouvez pas définir une interface synchrone à partir d’une interface asynchrone (autre que IUnknown). Les interfaces synchrones ne peuvent pas non plus hériter d’interfaces asynchrones. Le compilateur MIDL émet un message d’erreur si vous tentez l’une ou l’autre.
[
object,
uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d),
async_uuid(1c733a30-2a1c-11ce-ade5-00aa0044773d),
pointer_default(unique)
]
interface IMyInterface : IUnknown
{
/* Interface definition goes here*/
}