atributo dispinterface

A instrução dispinterface define um conjunto de propriedades e métodos nos quais você pode chamar IDispatch::Invoke. Uma dispinterface pode ser definida listando explicitamente o conjunto de métodos e propriedades com suporte (Sintaxe 1) ou listando uma única interface (Sintaxe 2).

[
    [attributes]
]
dispinterface dispinterface-name
{
    properties:
        property-list
    methods:
        method-list
};

[
  [attributes]
]
dispinterface dispinterface-name
{
    interface interface-name
};

Parâmetros

attributes

Especifica atributos que se aplicam a toda a dispinterface. Os seguintes atributos são aceitos: [helpstring], [helpcontext], [helpfile], [hidden], [nonextensible], [oleautomation], [restricted], [uuid], e [version].

dispinterface-name

O nome pelo qual a dispinterface é conhecida na biblioteca de tipos. Esse nome deve ser exclusivo na biblioteca de tipos.

property-list

(Sintaxe 1) Uma lista opcional de propriedades com suporte pelo objeto , declarada na forma de variáveis. Essa é a forma abreviada para declarar as funções de propriedade na lista de métodos. Consulte a seção de comentários para obter detalhes.

method-list

(Sintaxe 1) Uma lista que inclui um protótipo de função para cada método e propriedade na dispinterface. Qualquer número de definições de função pode aparecer na lista de methlist. Uma função na methlist tem o seguinte formato:

[atributos]returntype methname type paramname(params);

Os seguintes atributos são aceitos em um método em uma dispinterface: [helpstring], [helpcontext], [propget], [propput], [propputref], [string]e [vararg]. Se [vararg] for especificado, o último parâmetro deverá ser uma matriz segura do tipo VARIANT .

A lista de parâmetros é uma lista delimitada por vírgulas, cada elemento do qual tem o seguinte formulário:

[atributos]

O tipo pode ser qualquer tipo declarado ou interno ou um ponteiro para qualquer tipo. Os atributos nos parâmetros são:

[in], [out], [opcional], [cadeia de caracteres]

nome da interface

(Sintaxe 2) O nome da interface a ser declarada como uma interface IDispatch.

Comentários

O compilador MIDL aceita a seguinte ordenação de parâmetro (da esquerda para a direita):

  1. Parâmetros obrigatórios (parâmetros que não têm os atributos [defaultvalue] ou [opcional]),
  2. parâmetros opcionais com ou sem o atributo [defaultvalue],
  3. parâmetros com o atributo [opcional] e sem o atributo [defaultvalue],
  4. [ lcid] parâmetro, se houver,
  5. Parâmetro [ retval]

As funções de método são especificadas exatamente conforme descrito na página de referência do módulo , exceto que o atributo [ entrada] não é permitido. Observe que STDOLE32. TLB (STDOLE. O TLB em sistemas de 16 bits) deve ser importado, pois uma dispinterface herda do IDispatch.

Você pode declarar propriedades nas listas de propriedades ou métodos. Declarar propriedades na lista de propriedades não indica o tipo de acesso que a propriedade dá suporte (ou seja, obter, colocar ou putref). Especifique o atributo [ readonly] para propriedades que não dão suporte a putref ou putref. Se você declarar as funções de propriedade na lista de métodos, as funções de uma propriedade terão o mesmo identificador.

Usando a primeira sintaxe, as propriedades: e métodos: marcas são necessárias. O atributo [ id] também é necessário em cada membro. Por exemplo:

properties: 
    [id(0)] int Value;    // Default property. 
methods: 
    [id(1)] HRESULT Show();

Ao contrário dos membros da interface, os membros de dispinterface não podem usar o atributo retval para retornar um valor além de um código de erro HRESULT. O atributo [ lcid] também é inválido para dispinterfaces, porque IDispatch::Invoke passa um LCID. No entanto, é possível reenviar uma interface que usa esses atributos.

Usando a segunda sintaxe, as interfaces que dão suporte a IDispatch e são declaradas anteriormente em um script ODL podem ser redeclaradas como interfaces IDispatch da seguinte maneira:

dispinterface helloPro 
{ 
    interface hello; 
};

O exemplo anterior declara todos os membros do hello e todos os membros que hello herda como IDispatch de suporte. Nesse caso, se hello fosse declarado anteriormente com membros [lcid] e [retval] que retornavam HRESULTs, MkTypLib removeria cada parâmetro [lcid] e o tipo de retorno HRESULT e, em vez disso, marcaria o tipo de retorno como o do parâmetro [retval].

Observação

A ferramenta Mktyplib.exe está obsoleta. Em vez disso, use o compilador MIDL.

 

As propriedades e os métodos de uma dispinterface não fazem parte do VTBL da dispinterface. Consequentemente, CreateStdDispatch e DispInvoke não podem ser usados para implementar IDispatch::Invoke. A dispinterface é usada quando um aplicativo precisa expor funções não VTBL existentes por meio da Automação. Esses aplicativos podem implementar IDispatch::Invoke examinando o parâmetro dispidMember e chamando diretamente a função correspondente.

Exemplos

[ 
    uuid(1e196b20-1f3c-1069-996b-00dd010fe676), 
    version(1.0), 
    helpstring("Useful help string."), 
    helpcontext(2480)
] 
dispinterface MyDispatchObject 
{ 
    properties: 
        [id(1)] int x;    //An integer property named x 
        [id(2)] BSTR y;   //A string property named y 
    methods: 
        [id(3)] HRESULT show();    //No arguments, no result 
        [id(11)] int computeit(int inarg, double *outarg); 
}; 
 
[
    uuid(1e123456-1f3c-1069-996b-00dd010fe676)
] 
dispinterface MyObject 
{ 
    properties: 
    methods: 
        [id(1), propget, bindable, defaultbind, displaybind] long x(); 
 
        [id(1), propput, bindable, defaultbind, 
         displaybind] HRESULT x(long rhs); 
}

Confira também

bindable

defaultbind

displaybind

Helpcontext

Helpfile

helpstring

Escondidos

Em

Interface

TYPEFLAGS

Sintaxe de arquivo ODL

Exemplo de arquivo ODL

Gerando uma biblioteca de tipos com MIDL

Opcional

out

nonextensible

propget

propput

propputref

oleautomation

Restrito

string

uuid

vararg

version