Atributo async_uuid
O atributo de interface [async_uuid] direciona o compilador MIDL para definir versões síncronas e assíncronas de uma interface COM.
[
object,
uuid(string-uuid1),
async_uuid(string-uuid2)[ [, interface-attribute-list]
]
interface interface-name : base-interface
{
interface-definition
}
-
string-uuid1
-
Uma cadeia de caracteres UUID, gerada pelo utilitário Uuidgen, que identifica a versão síncrona da interface.
-
string-uuid2
-
Uma cadeia de caracteres UUID, gerada pelo utilitário Uuidgen, que identifica a versão assíncrona da interface.
-
interface-attribute-list
-
Outros atributos que se aplicam à interface como um todo. Não é possível usar o atributo [version] em uma interface COM.
-
interface-name
-
O nome da interface.
-
interface base
-
A interface da qual essa interface deriva. A interface base deve ser IUnknown ou uma interface assíncrona que deriva, direta ou indiretamente, de IUnknown.
-
interface-definition
-
Especifica instruções IDL que formam a definição da interface .
O uso desse atributo requer o Windows 2000 ou versões posteriores do Windows.
Quando você aplica o atributo [async_uuid] a uma interface COM (ou seja, uma interface que tem o atributo [object] ), o compilador MIDL gera uma definição assíncrona da interface, além da versão tradicional e síncrona. A interface assíncrona terá os mesmos nomes que a interface síncrona, mas com um prefixo "Async". O IID (identificador de interface) será o UUID especificado como um parâmetro para o atributo [async_uuid] .
Para a interface assíncrona, MIDL divide cada método em métodos separados de início e término . O método begin tem o nome do método síncrono com um prefixo "Begin_" e inclui todos os parâmetros [in] do método síncrono. O método finish tem o nome do método síncrono com um prefixo "Finish_" e inclui todos os parâmetros [out] do método síncrono. Se o método síncrono tiver parâmetros [in, out], eles serão incluídos nos métodos assíncronos begin e finish .
Se um método de interface assíncrona tiver o atributo [call_as] , MIDL gerará declarações para os métodos begin e finish . Você deve implementar ambos os métodos.
Cada interface assíncrona é um modificador em uma interface síncrona e, como tal, não tem um grafo de herança separado. Isso significa que você não pode definir uma interface síncrona de uma interface assíncrona (diferente de IUnknown). As interfaces síncronas também não podem herdar de interfaces assíncronas. O compilador MIDL emitirá uma mensagem de erro se você tentar uma delas.
[
object,
uuid(0c733a30-2a1c-11ce-ade5-00aa0044773d),
async_uuid(1c733a30-2a1c-11ce-ade5-00aa0044773d),
pointer_default(unique)
]
interface IMyInterface : IUnknown
{
/* Interface definition goes here*/
}