atributo de objeto
O atributo de interface [objeto] identifica uma interface COM. (Uma lista de atributos de interface que não inclui o atributo [objeto] indica uma interface DCE RPC.)
[
object,
uuid(string-uuid)
[ , interface-attribute-list]
]
interface interface-name : base-interface
{
...
}
Parâmetros
-
string-uuid
-
Uma cadeia de caracteres UUID gerada pelo utilitário Uuidgen. Você pode colocar a cadeia de caracteres UUID entre aspas.
-
interface-attribute-list
-
Outros atributos que se aplicam à interface como um todo.
-
nome da interface
-
O nome da interface.
-
interface base
-
A interface COM da qual essa interface deriva. A interface base deve ser IUnknown, IDispatch ou outra interface COM que deriva, direta ou indiretamente, de IUnknown ou IDispatch.
Comentários
Uma lista de atributos de interface para uma interface COM deve incluir o atributo [uuid] , mas não pode incluir o atributo [versão] .
Por padrão, compilar uma interface COM com o compilador MIDL gera os arquivos necessários para criar uma DLL de proxy. Essa DLL contém o código para dar suporte ao uso da interface COM personalizada por aplicativos cliente e servidores de objetos. No entanto, se a lista de atributos de interface de uma interface COM especificar o atributo [local] , o compilador MIDL gerará apenas o arquivo de cabeçalho da interface.
O compilador MIDL gera automaticamente um tipo de dados de interface para uma interface COM. Como alternativa, você pode usar typedef com a interface palavra-chave para definir explicitamente um tipo de dados de interface. Em seguida, a especificação da interface pode usar o tipo de dados de interface em parâmetros de função e retornar valores, membros de struct e união e outras declarações de tipo. O exemplo a seguir ilustra o uso de um tipo de dados IStream gerado automaticamente:
[
object,
uuid (ABCDEFOO-1234-1234-5678-ABCDEF123456)
]
interface IStream : IUnknown
{
typedef IStream * LPSTREAM;
// Other interface definition statements.
}
Em uma interface COM, todas as funções membro da interface são consideradas funções virtuais. Uma função virtual tem um ponteiro implícito como o primeiro parâmetro. A tabela de funções virtuais contém uma entrada para cada função membro da interface.
As funções membro da interface do objeto não[locais] devem ter um valor retornado de HRESULT ou SCODE. (Observe que versões anteriores do MIDL permitiram que as funções membro retornassem void. No entanto, a partir do MIDL versão 3.0, retornar void gera um erro do compilador.) Ter um valor retornado de HRESULT ou SCODE significa que, se uma exceção for gerada durante uma chamada remota, os proxies gerados capturarão a exceção e retornarão o código de exceção no valor retornado. Se o aplicativo puder se dar ao luxo de ignorar erros que ocorrem durante uma chamada de procedimento remoto, você poderá especificar HRESULT como o tipo de retorno sem verificar o valor retornado após a chamada.
Se você estiver recompilando um aplicativo antigo, alterar os tipos de retorno poderá introduzir problemas de compatibilidade com versões anteriores quando o servidor enviar o resultado recém-introduzido para o cliente. Como alternativa à alteração do tipo de retorno, você pode rotular a função que retorna void com o atributo [call_as] , tornando-a uma função local. Em seguida, defina uma função remota relacionada com os mesmos parâmetros, mas com o tipo de retorno HRESULT. A função local pode gerar uma exceção com base nesse valor HRESULT, se necessário.
O atributo [objeto] não está disponível quando você compila usando o compilador MIDL /osf switch.
Exemplos
[
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.
}
Confira também