atributo dual
El atributo dual identifica una interfaz que expone propiedades y métodos a través de IDispatch y directamente a través del VTBL.
[
uuid(uuid-number),
oleautomation,
dual
[ , optional-attribute-list]
]
interface interface-name
{
. . .
};
-
uuid-number
-
Especifica un número de identificación único universal para la interfaz.
-
optional-attribute-list
-
Especifica una lista de cero o más atributos MIDL adicionales.
-
interface-name
-
Nombre de la interfaz a la que se aplicará el atributo dual .
Las interfaces identificadas por el atributo dual deben ser compatibles con Automation y derivarse de IDispatch. Este atributo no se permite en dispinterfaces.
El atributo dual crea una interfaz que es una interfaz IDispatch y una interfaz del Modelo de objetos componentes (COM). Las siete primeras entradas del VTBL para una interfaz dual son los siete miembros de IDispatch y las entradas restantes son para el acceso directo a los miembros de la interfaz dual. Todos los parámetros y tipos devueltos especificados para los miembros de una interfaz dual deben ser tipos compatibles con Automation.
Todos los miembros de una interfaz dual deben pasar un VALOR HRESULT como valor devuelto de la función. Los miembros, como las funciones de descriptor de acceso de propiedad, que necesitan devolver otros valores, deben especificar el último parámetro como out, retval, que indica un parámetro de salida que devuelve el valor de la función. Además, los miembros que necesitan admitir varias configuraciones regionales deben pasar un parámetro lcid .
Una interfaz dual proporciona tanto la velocidad del enlace VTBL directo como la flexibilidad del enlace IDispatch . Por este motivo, se recomiendan interfaces duales siempre que sea posible.
Nota
Si la aplicación accede a los datos del objeto mediante la conversión del puntero en la llamada de interfaz, debe comprobar los punteros VTBL del objeto en sus propios punteros VTBL para asegurarse de que está conectado al proxy adecuado.
Especificar dual en una interfaz implica que la interfaz es compatible con Automation y, por lo tanto, hace que se establezcan las marcas de TYPEFLAG_FDUAL y TYPEFLAG_FOLEAUTOMATION.
TYPEFLAG_FDUAL, TYPEFLAG_FOLEAUTOMATION
[
uuid(1e196b20-1f3c-1069-996b-00dd010fe676),
oleautomation, dual
]
interface IHello : IDispatch
{
//Diverse properties and methods defined here.
};