Freigeben über


Standardzeigertypen

Zeiger müssen keine explizite Attributbeschreibung aufweisen. Wenn kein explizites Attribut angegeben wird, verwendet der MIDL-Compiler ein Standardzeiger-Attribut.

Die Standardfälle für nichtattributete Zeiger sind die folgenden:

  • Zeiger der obersten Ebene, die in Parameterlisten angezeigt werden, weisen standardmäßig [Bezug] Zeiger auf.
  • Alle anderen Zeiger weisen standardmäßig den vom Attribut [pointer_default] angegebenen Typ auf. Wenn kein [pointer_default] -Attribut angegeben wird, werden diese Zeiger standardmäßig auf das [ eindeutige ]-Attribut festgelegt, wenn sich der MIDL-Compiler im modus Microsoft Extensions Modus befindet oder das Attribut [ptr] verwendet wird, wenn sich der MIDL-Compiler im DCE-kompatiblen Modus befindet.

Wenn eine Remoteprozedur einen Zeiger zurückgibt, muss der Rückgabewert ein [ eindeutiger ] oder ein vollständiger Zeiger ([ ptr ]) sein.

/* 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.    
}

Bemerkungen

Um ein eindeutiges Zeiger-Attributverhalten sicherzustellen, verwenden Sie beim Definieren eines Zeigers immer explizite Zeigerattribute.

Es wird empfohlen, dass [ptr] nur verwendet wird, wenn Zeigeraliasing erforderlich ist.