dispinterface
9/8/2008
Esta declaração define um conjunto de propriedades e métodos no qual IDispatch::Invoke pode ser chamado. Um dispinterface pode ser definido por explicitamente listagem o conjunto de com suporte métodos e propriedades (Sintaxe 1) ou por listagem uma única interface (Syntax 2).
Syntax
[attributes]
dispinterface intfname {
properties:
proplist
methods:
methlist
};
Syntax
[attributes]
dispinterface intfname {
interface interfacename
};
Elementos
- Atributos
O HelpString, HelpContext, Oculta, UUID, e versão Os atributos são aceitos antes Dispinterface. Atributos (inclusive os colchetes) podem ser omitidos, Except for o atributo UUID, que é exigido.
- intfname
O nome pelo qual o Dispinterface é conhecido na biblioteca de tipo. Esse nome deve ser exclusivo dentro de biblioteca tipo.
- InterfaceName
(Sintaxe 2) O nome da interface para declarar como um IDispatch interface.
- proplist
(Sintaxe 1) Um opcional lista das propriedades com suporte, o objeto, declarado na forma de variáveis. Este é o forma reduzida para declarar as funções propriedade na lista de métodos. Consulte a seção comentários para obter detalhes.
methlist
(Sintaxe 1) Uma lista abrangendo um protótipo função para cada método e propriedade no Dispinterface. Qualquer número de definições função pode aparecer em methlist. Uma função em methlist tem a seguinte forma:[ Atributos ] returntype methname**(params)**;
O seguinte atributos são aceitos em um método em um dispinterface:
- HelpString
- HelpContext
- seqüência de caracteres (para compatibilidade com o Interface Definition Language)
- ligável
- defaultbind
- displaybind
- propget
- propput
- propputref
- Vararg
Se Vararg é especificado, o último parâmetro deve ser uma matriz segura do tipo Variant.
Lista a parâmetro é uma lista Comma-delimited, cada elemento do qual foi a seguinte forma:
[ Atributos ] tipo PARAMNAME
O tipo pode ser qualquer declarado ou interno tipo, ou um ponteiro para qualquer tipo. Os atributos em parâmetros são Em, Saída, opcional, e seqüência de caracteres.
Se opcional for especificado, ele somente deve ser especificado em parâmetros de mais à direita, e os tipos desses parâmetros devem ser Variant.
Remarks
Método funções são especificadas exatamente como é descrita em uma declaração módulo exceto pelo fato de que o atributo entrada não é permitido.
Stdole2.tlb deve ser importado, porque um dispinterface herda IDispatch.
As propriedades podem ser declaradas em listas de propriedades ou métodos. Declarar propriedades na lista de propriedades não indica que o tipo de acessar a propriedade suporta (get, pôr, ou PUTREF).
Especificar o somente leitura atributo de propriedades que não suporte pôr Ou PUTREF.
Se funções de propriedade são declaradas na lista de métodos, funções para uma propriedade todos terão o mesmo ID.
Usando Sintaxe 1, as propriedades: e os métodos: As marcas são exigido. O ID atributo também é exigido em cada membro. Por exemplo:
properties:
[id(0)] int Value; // Default property.
methods:
[id(1)] void Show();
Ao contrário interface membros, membros Dispinterface Não é possível usar o retval atributo para retornar um valor in addition to um código de erro HRESULT. O LCID atributo também é inválido para dispinterfaces porque Chamar passa uma localidade ID (LCID). No entanto, é possível declarar uma interface novamente que utiliza esses atributos.
Usando a Sintaxe 2, as interfaces que suporte IDispatch e são declaradas anteriormente em um objeto Definição de idioma (ODL) script pode ser declarado novamente como IDispatch As interfaces da seguinte maneira.
dispinterface helloPro {
interface hello;
};
Este exemplo declara todos os membros do exemplo de saudação e todos os membros que ele herda a suporte IDispatch.
Neste maiúsculas e minúsculas, se OLÁ olá foi declarada anteriormente com LCID e retval Membros que retornados HRESULTs, MkTypLib seria remover cada LCID parâmetro e HRESULT tipo de retorno e, em vez disso, marca a tipo de retorno do tipo base das retval parâmetro.
As propriedades e métodos de um dispinterface não fazem parte de VTBL do Dispinterface. Conseqüentemente, CreateStdDispatch e DispInvoke não pode ser usado para implementar Chamar.
O Dispinterface é usado quando um aplicativo precise expor existente funções non-VTBL a automação. Esses aplicativos podem implementar Chamar Examinando o dispidMember parâmetro e diretamente chamado o correspondente função.
Example
[uuid(BFB73347-822A-1068-8849-00DD011087E8), 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)] void show(); // No arguments, no result.
[id(11)] int computeit(int inarg, double *outarg);
};
[uuid 00000000-0000-0000-0000-123456789012]
dispinterface MyObject
{
properties:
methods:
[id(1), propget, bindable, defaultbind, displaybind]
long x();
[id(1), propput, bindable, defaultbind, displaybind]
void x(long rhs);
}