ref (atributo)

El atributo [ref] identifica un puntero de referencia. Se usa simplemente para representar un nivel de direccionamiento indirecto.

pointer_default(ref)

typedef [ ref [[ , type-attribute-list ]] ] type-specifier declarator-list; 

typedef [ struct | union ] 
{
    [ ref [[ , field-attribute-list ]] ] type-specifier declarator-list;
    ...}

[[ [ function-attribute-list ] ]] type-specifier [[ptr-decl]] function-name(
    [ ref [[ , parameter-attribute-list ]] ] type-specifier [[standard-declarator]]
    , ...);

Parámetros

type-attribute-list

Especifica uno o varios atributos que se aplican al tipo. Los atributos de tipo válidos incluyen [handle], [switch_type], [transmit_as]; los atributos de puntero [ref], [unique]o [ptr]; y los atributos de uso [context_handle], [string] y [ignore]. Separe varios atributos con comas.

type-specifier

Especifica un tipo base, una estructura, una unióno un identificador de tipo de enumeración. Una especificación de almacenamiento opcional puede preceder al especificador de tipos.

declarador estándar

Especifica un declarador de C estándar, como un identificador, un declarador de puntero o un declarador de matriz. Para obtener más información, vea Array and Sized-Pointer Attributes, arrays, and Arrays and Pointers.

declarator-list

Especifica declaradores de C estándar, como identificadores, declaradores de puntero y declaradores de matriz. Para obtener más información, vea Array and Sized-Pointer Attributes, arrays, and Arrays and Pointers. La lista de declaradores consta de uno o varios declaradores separados por comas. El identificador parameter-name del declarador de función es opcional.

field-attribute-list

Especifica cero o más atributos de campo que se aplican a la estructura, al miembro de unión o al parámetro de función. Los atributos de campo válidos incluyen [first_is], [last_is], [length_is], [max_is], [size_is]; los atributos de uso [string], [ignore]y [context_handle]; el atributo de puntero [ref], [unique]o [ptr]; y el atributo de unión [switch_type]. Separe varios atributos de campo con comas.

function-attribute-list

Especifica cero o más atributos que se aplican a la función. Los atributos de función válidos son [devolución de llamada], [local]; el atributo de puntero [ref], [unique]o [ptr]; y los atributos de uso [string], [ignore]y [context_handle].

ptr-decl

Especifica al menos un declarador de puntero al que se aplica el atributo [ref ]. Un declarador de puntero es el mismo que el declarador de puntero usado en C; se construye a partir del designador *, modificadores como far y el calificador const.

nombre de función

Especifica el nombre del procedimiento remoto.

parameter-attribute-list

Consta de cero o más atributos adecuados para el tipo de parámetro especificado. Los atributos de parámetro pueden tomar los atributos direccionales [in] y [out]; los atributos de campo [first_is], [last_is], [length_is], [max_is], [size_is]y [switch_type]; el atributo de puntero [ref], [unique]o [ptr]; y los atributos de uso [context_handle] y [string]. El atributo de uso [ignore] no se puede usar como atributo de parámetro. Separe varios atributos con comas.

Observaciones

Un atributo de puntero se puede aplicar como atributo de tipo, como atributo de campo que se aplica a un miembro de estructura, miembro de unión o parámetro; o como atributo de función que se aplica al tipo de valor devuelto de la función. El atributo de puntero también puede aparecer con la palabra clave [pointer_default].

Un puntero de referencia tiene las siguientes características:

  • Siempre apunta al almacenamiento válido; nunca tiene el valor NULL. Siempre se puede desreferenciar un puntero de referencia.
  • Nunca cambia durante una llamada. Un puntero de referencia siempre apunta al mismo almacenamiento en el cliente antes y después de la llamada.
  • No asigna memoria nueva en el cliente. Los datos devueltos desde el servidor se escriben en el almacenamiento existente especificado por el valor del puntero de referencia antes de la llamada.
  • No provoca el alias. No se puede acceder al almacenamiento al que apunta un puntero de referencia desde ningún otro nombre de la función.

Un puntero de referencia no se puede usar como el tipo de puntero devuelto por una función.

Si no se especifica ningún atributo para un parámetro de puntero de nivel superior, se trata como puntero de referencia.

Ejemplos

[unique] char * GetFirstName( 
    [in, ref] char * pszFullName);

Vea también

Matrices

Matrices y punteros

Atributos de matriz y Sized-Pointer

Tipos base MIDL

devolución de llamada

const

context_handle

Enum

first_is

Manejar

Ignorar

last_is

length_is

Local

max_is

out

Ptr

size_is

Cadena

Estructura

switch_type

transmit_as

union

unique