Condividi tramite


Tipi di puntatore predefiniti

I puntatori non devono avere una descrizione esplicita dell'attributo. Quando non viene specificato un attributo esplicito, il compilatore MIDL usa un attributo puntatore predefinito.

I casi predefiniti per i puntatori non attribuiti sono i seguenti:

  • Puntatori di primo livello visualizzati negli elenchi di parametri per impostazione predefinita a puntatori [ref].
  • Per impostazione predefinita, tutti gli altri puntatori sono il tipo specificato dall'attributo [pointer_default]. Quando non viene fornito alcun attributo [pointer_default], questi puntatori vengono predefiniti all'attributo [ unique ] quando il compilatore MIDL è in modalità Estensioni Microsoft o l'attributo [ptr] quando il compilatore MIDL è in modalità compatibile con DCE.

Quando una routine remota restituisce un puntatore, il valore restituito deve essere un puntatore [ unique ] o full ([ 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.    
}

Commenti

Per garantire un comportamento univoco dell'attributo puntatore, usare sempre attributi puntatore espliciti durante la definizione di un puntatore.

È consigliabile usare [ptr] solo quando è necessario l'aliasing del puntatore.