Compartir a través de


Tipos de puntero predeterminados

Los punteros no son necesarios para tener una descripción de atributo explícita. Cuando no se proporciona un atributo explícito, el compilador MIDL usa un atributo de puntero predeterminado.

Los casos predeterminados para punteros no distribuidos son los siguientes:

  • Punteros de nivel superior que aparecen en listas de parámetros de forma predeterminada a los punteros [ref].
  • El resto de punteros se establece de forma predeterminada en el tipo especificado por el atributo [pointer_default]. Cuando no se proporciona ningún atributo [pointer_default] , estos punteros tienen como valor predeterminado el atributo [ único ] cuando el compilador MIDL está en modo Microsoft Extensions o el atributo [ptr] cuando el compilador MIDL está en modo compatible con DCE.

Cuando un procedimiento remoto devuelve un puntero, el valor devuelto debe ser un puntero [único ] o completo ([ ptr ]).

/* IDL file compiled without /osf */
[ 
  uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45),
  version(1.0),
  pointer_default(ptr)
]
interface MyInterface
{
    typedef long *PLONG;
  
    struct MyCircularList {
        struct MyCircularList *pRight;
        struct MyCircularList *pLeft;
        long Data;
    };

    void Foo1( [in] PLONG p );                   // p is ref
 
    void Foo2( [in] struct MyCircularList *p );  // p is ref, p->pRight and p->pLeft is ptr

    struct MyCircularList *Foo3( void );         // returned pointer is ptr.    
}

[ 
  uuid(ba209999-0c6c-11d2-97cf-00c04f8eea46),
  version(1.0)
]
interface MyInterface2
{
    struct MySingleList
       {
       struct MySingleList *pNext;
       long Data;
       };
    void Foo4( [in] struct MySingleList *p );  // p is ref, p->pNext is unique

    struct MySingleList *Foo5( void );         // returned pointer is unique.    
}

Observaciones

Para garantizar un comportamiento de atributo de puntero no ambiguo, use siempre atributos de puntero explícitos al definir un puntero.

Se recomienda usar [ptr] solo cuando se requiere alias de puntero.