atributo dual
O atributo duplo identifica uma interface que expõe propriedades e métodos por meio de IDispatch e diretamente por meio do VTBL.
[
uuid(uuid-number),
oleautomation,
dual
[ , optional-attribute-list]
]
interface interface-name
{
. . .
};
Parâmetros
-
uuid-number
-
Especifica um número de identificação universalmente exclusivo para a interface
-
optional-attribute-list
-
Especifica uma lista de zero ou mais atributos MIDL adicionais.
-
nome da interface
-
O nome da interface à qual o atributo duplo será aplicado.
Comentários
As interfaces identificadas pelo atributo duplo devem ser compatíveis com a Automação e derivadas do IDispatch. Esse atributo não é permitido em dispinterfaces.
O atributo duplo cria uma interface que é uma interface IDispatch e uma interface COM (Component Object Model). As sete primeiras entradas do VTBL para uma interface dupla são os sete membros do IDispatch e as entradas restantes são para acesso direto aos membros da interface dupla. Todos os parâmetros e tipos de retorno especificados para membros de uma interface dupla devem ser tipos compatíveis com a Automação.
Todos os membros de uma interface dupla devem passar um HRESULT como o valor retornado da função. Membros, como funções de acessador de propriedade, que precisam retornar outros valores, devem especificar o último parâmetro como out, retval, indicando um parâmetro de saída que retorna o valor da função. Além disso, os membros que precisam dar suporte a várias localidades devem passar por um parâmetro lcid .
Uma interface dupla fornece a velocidade da associação VTBL direta e a flexibilidade da associação IDispatch . Por esse motivo, as interfaces duplas são recomendadas sempre que possível.
Observação
Se o aplicativo acessar dados de objeto lançando esse ponteiro dentro da chamada de interface, você deverá verificar os ponteiros VTBL no objeto em relação aos seus próprios ponteiros VTBL para garantir que você esteja conectado ao proxy apropriado.
Especificar duplo em uma interface implica que a interface é compatível com a Automação e, portanto, faz com que os sinalizadores TYPEFLAG_FDUAL e TYPEFLAG_FOLEAUTOMATION sejam definidos.
Flags
TYPEFLAG_FDUAL, TYPEFLAG_FOLEAUTOMATION
Exemplos
[
uuid(1e196b20-1f3c-1069-996b-00dd010fe676),
oleautomation, dual
]
interface IHello : IDispatch
{
//Diverse properties and methods defined here.
};
Confira também