Compartir a través de


object (atributo)

El atributo de interfaz [object] identifica una interfaz COM. (Una lista de atributos de interfaz que no incluye el atributo [object] indica una interfaz RPC de DCE).

[ 
    object, 
    uuid(string-uuid)
    [ , interface-attribute-list] 
] 
interface interface-name : base-interface
{
...    
}

Parámetros

string-uuid

Cadena UUID generada por la utilidad Uuidgen. Puede incluir la cadena UUID entre comillas.

interface-attribute-list

Otros atributos que se aplican a la interfaz en su conjunto.

interface-name

Nombre de la interfaz.

interfaz base

Interfaz COM de la que deriva esta interfaz. La interfaz base debe ser IUnknown, IDispatch u otra interfaz COM que derive, directa o indirectamente, de IUnknown o IDispatch.

Observaciones

Una lista de atributos de interfaz para una interfaz COM debe incluir el atributo [uuid], pero no puede incluir el atributo [version].

De forma predeterminada, compilar una interfaz COM con el compilador MIDL genera los archivos necesarios para compilar un archivo DLL de proxy. Este archivo DLL contiene el código para admitir el uso de la interfaz COM personalizada por parte de las aplicaciones cliente y los servidores de objetos. Sin embargo, si la lista de atributos de interfaz de una interfaz COM especifica el atributo [local], el compilador MIDL solo genera el archivo de encabezado de interfaz.

El compilador MIDL genera automáticamente un tipo de datos de interfaz para una interfaz COM. Como alternativa, puede usar typedef con la palabra clave interface para definir explícitamente un tipo de datos de interfaz. Después, la especificación de interfaz puede usar el tipo de datos de interfaz en parámetros de función y valores devueltos, miembros de estructura y unión , y otras declaraciones de tipo. En el ejemplo siguiente se muestra el uso de un tipo de datos IStream generado automáticamente:

[
    object, 
    uuid (ABCDEFOO-1234-1234-5678-ABCDEF123456)
] 
interface IStream : IUnknown
{ 
    typedef IStream * LPSTREAM; 
    // Other interface definition statements.
}

En una interfaz COM, se supone que todas las funciones miembro de la interfaz son funciones virtuales. Una función virtual tiene un puntero implícito como primer parámetro. La tabla de funciones virtuales contiene una entrada para cada función miembro de interfaz.

Las funciones miembro de interfaz de objeto no[local] deben tener un valor devuelto de HRESULT o SCODE. (Tenga en cuenta que las versiones anteriores de MIDL permitían que las funciones miembro devuelvan void. Sin embargo, a partir de MIDL versión 3.0, la devolución de void genera un error del compilador). Tener un valor devuelto de HRESULT o SCODE significa que si se genera una excepción durante una llamada remota, los servidores proxy generados detectan la excepción y devuelven el código de excepción en el valor devuelto. Si la aplicación puede permitirse omitir los errores que se producen durante una llamada a procedimiento remoto, puede especificar HRESULT como el tipo de valor devuelto sin comprobar el valor devuelto después de la llamada.

Si va a volver a compilar una aplicación antigua, cambiar los tipos de valor devuelto puede presentar problemas de compatibilidad con versiones anteriores cuando el servidor envía el resultado recién introducido al cliente. Como alternativa a cambiar el tipo de valor devuelto, puede etiquetar la función que devuelve void con el atributo [call_as], lo que la convierte en una función local. A continuación, defina una función remota relacionada con los mismos parámetros, pero con el tipo de valor devuelto HRESULT. La función local puede generar una excepción basada en ese valor HRESULT, si es necesario.

El atributo [object] no está disponible cuando se compila mediante el modificador /osf del compilador MIDL.

Ejemplos

[
    uuid(12345678-1234-1234-1234-123456789ABC), 
    object
] 
interface IMyInterface : IUnknown
{
    // Interface definition statements.
}

[
    uuid(87654321-1234-1234-1234-123456789ABC), 
    object, 
    local
] 
interface ILocalInterface : ISomeOldCOMInterface
{
    // Interface definition statements.
}

Vea también

call_as

Archivo de definición de interfaz (IDL)

iid_is

Interfaz

Local

/Osf

Typedef

uuid

Versión