dispinterface (atributo)
La instrucción dispinterface define un conjunto de propiedades y métodos en los que puede llamar a IDispatch::Invoke. Una interfaz dispinterface se puede definir mediante la enumeración explícita del conjunto de métodos y propiedades admitidos (sintaxis 1) o enumerando una única interfaz (sintaxis 2).
[
[attributes]
]
dispinterface dispinterface-name
{
properties:
property-list
methods:
method-list
};
[
[attributes]
]
dispinterface dispinterface-name
{
interface interface-name
};
Parámetros
-
attributes
-
Especifica los atributos que se aplican a toda la interfaz dispinterface. Se aceptan los atributos siguientes: [helpstring], [helpcontext], [helpfile], [hidden], [nonextensible], [oleautomation], [restricted], [uuid]y [version].
-
dispinterface-name
-
Nombre por el que se conoce la interfaz dispinterface en la biblioteca de tipos. Este nombre debe ser único dentro de la biblioteca de tipos.
-
property-list
-
(Sintaxis 1) Lista opcional de propiedades admitidas por el objeto, declaradas en forma de variables. Esta es la forma abreviada para declarar las funciones de propiedad en la lista de métodos. Consulte la sección de comentarios para obtener más información.
-
method-list
-
(Sintaxis 1) Lista que consta de un prototipo de función para cada método y propiedad en la interfaz dispinterface. Cualquier número de definiciones de función puede aparecer en la lista de metátodos. Una función de methlist tiene la siguiente forma:
[atributos]returntype methname type paramname(params);
Los atributos siguientes se aceptan en un método en una dispinterface: [helpstring], [helpcontext], [propget], [propput], [propputref], [string]y [vararg]. Si se especifica [vararg], el último parámetro debe ser una matriz segura de tipo VARIANT .
La lista de parámetros es una lista delimitada por comas, cada elemento con la siguiente forma:
[atributos]
El tipo puede ser cualquier tipo declarado o integrado, o un puntero a cualquier tipo. Los atributos de los parámetros son:
-
interface-name
-
(Sintaxis 2) Nombre de la interfaz que se va a declarar como interfaz IDispatch.
Comentarios
El compilador MIDL acepta el siguiente orden de parámetros (de izquierda a derecha):
- Parámetros obligatorios (parámetros que no tienen los atributos [defaultvalue] o [opcional] ),
- parámetros opcionales con o sin el atributo [defaultvalue],
- parámetros con el atributo [opcional] y sin el atributo [defaultvalue],
- [ lcid] parámetro, si existe,
- [ retval] parameter
Las funciones de método se especifican exactamente como se describe en la página de referencia del módulo , salvo que no se permite el atributo [ entry]. Tenga en cuenta que STDOLE32. TLB (STDOLE. TLB en sistemas de 16 bits) debe importarse, ya que una interfaz dispinterface hereda de IDispatch.
Puede declarar propiedades en las listas de propiedades o métodos. Declarar propiedades en la lista de propiedades no indica el tipo de acceso que admite la propiedad (es decir, get, put o putref). Especifique el atributo [ readonly] para las propiedades que no admiten put o putref. Si declara las funciones de propiedad en la lista de métodos, las funciones de una propiedad tienen el mismo identificador.
Con la primera sintaxis, se requieren las propiedades: y los métodos: etiquetas. El atributo [ id] también es necesario en cada miembro. Por ejemplo:
properties:
[id(0)] int Value; // Default property.
methods:
[id(1)] HRESULT Show();
A diferencia de los miembros de interfaz, los miembros dispinterface no pueden usar el atributo retval para devolver un valor además de un código de error HRESULT. El atributo [ lcid] tampoco es válido para dispinterfaces, ya que IDispatch::Invoke pasa un LCID. Sin embargo, es posible volver a declarar una interfaz que use estos atributos.
Con la segunda sintaxis, las interfaces que admiten IDispatch y se declaran anteriormente en un script ODL se pueden volver a declarar como interfaces IDispatch de la siguiente manera:
dispinterface helloPro
{
interface hello;
};
En el ejemplo anterior se declaran todos los miembros de hello y todos los miembros que hello hereda como compatible con IDispatch. En este caso, si hello se declaró anteriormente con miembros [lcid] y [retval] que devolvieron HRESULTs, MkTypLib quitaría cada parámetro [lcid] y el tipo de valor devuelto HRESULT y, en su lugar, marcaría el tipo de valor devuelto como el del parámetro [retval].
Nota
La herramienta Mktyplib.exe está obsoleta. En su lugar, use el compilador MIDL.
Las propiedades y los métodos de una interfaz dispinterface no forman parte del VTBL de la interfaz dispinterface. Por lo tanto, CreateStdDispatch y DispInvoke no se pueden usar para implementar IDispatch::Invoke. La interfaz dispinterface se usa cuando una aplicación necesita exponer las funciones existentes que no son de VTBL a través de la automatización. Estas aplicaciones pueden implementar IDispatch::Invoke examinando el parámetro dispidMember y llamando directamente a la función correspondiente.
Ejemplos
[
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);
}
Vea también