Tipos de punteros de tres

MIDL admite tres tipos de punteros para dar cabida a una amplia gama de aplicaciones. Los tres niveles diferentes se denominan punteros de referencia, únicos y completos, y se indican mediante los atributos [ref], [unique]y [ptr], respectivamente. Las clases de puntero descritas por estos atributos son mutuamente excluyentes. Los atributos de puntero se pueden aplicar a punteros en definiciones de tipos, tipos devueltos de función, parámetros de función, miembros de estructuras o uniones o elementos de matriz.

Los punteros incrustados son punteros que son miembros de estructuras o uniones. También pueden ser elementos de matrices. En la dirección [in], se supone que los punteros incrustados [ref] apuntan al almacenamiento válido y no deben ser NULL. Esta situación es recursivamente aplicable a los punteros [ref] a los que apuntan. En la dirección [in] , los punteros incrustados [únicos] y completos (punteros con el atributo [ptr] ) pueden ser o no null.

Cualquier atributo de puntero colocado en un parámetro de la sintaxis de una declaración de función afecta solo al declarador de puntero más a la derecha para ese parámetro. Para afectar a otros declaradores de puntero, se deben usar tipos con nombre intermedios.

Las funciones que devuelven un puntero pueden tener un atributo de puntero como atributo de función. Los atributos [unique] y [ptr] se deben aplicar a los tipos devueltos de función. Las declaraciones de miembro que son punteros pueden especificar un atributo de puntero como atributo de campo. También se puede aplicar un atributo de puntero como atributo de tipo en construcciones typedef .

Cuando no se especifica ningún atributo de puntero como un atributo de campo o tipo, los atributos de puntero se aplican según las reglas de una declaración de puntero sin asignar como se indica a continuación.

En el modo de compatibilidad con DCE, los atributos de puntero se determinan en el archivo IDL que define. Si hay un atributo [pointer_default**]****especificado en la interfaz de definición, se usa ese atributo. Si no hay ningún atributo [pointer_default] presente, todos los punteros sin asignar son punteros completos.

En el modo de extensiones de Microsoft, los atributos de puntero se pueden determinar importando archivos IDL y se aplican en el orden siguiente:

  1. Atributo de puntero explícito aplicado en el sitio de uso.
  2. El atributo [ref], cuando el puntero sin asignar es un parámetro de puntero de nivel superior.
  3. Atributo [pointer_default] especificado en la interfaz de definición.
  4. Atributo [pointer_default] especificado en la interfaz base.
  5. Atributo [único].

El atributo de interfaz [pointer_default] especifica los atributos de puntero predeterminados que se aplicarán a un declarador de puntero en una declaración de tipo, parámetro o tipo de valor devuelto cuando esa declaración no tiene aplicado un atributo de puntero explícito. El atributo de interfaz [pointer_default] no se aplica a un puntero de nivel superior sin asignar de un parámetro, que se supone que es [ref].