Compartilhar via


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

Gerando uma biblioteca de tipos com MIDL

Interface

Lcid

oleautomation

Sintaxe do arquivo ODL

Exemplo de arquivo ODL

out

retval