Delen via


Standaardtypen voor aanwijzers

Aanwijzers zijn niet vereist om een expliciete kenmerkbeschrijving te hebben. Wanneer er geen expliciet kenmerk wordt opgegeven, gebruikt de MIDL Compiler een standaardaanwijzerkenmerk.

De standaardcases voor niet-toegewezen aanwijzers zijn het volgende:

  • Aanwijzers op het hoogste niveau die worden weergegeven in parameterlijsten, zijn standaard [ref] aanwijzers.
  • Alle andere aanwijzers worden standaard ingesteld op het type dat is opgegeven door het kenmerk [pointer_default]. Als er geen kenmerk [pointer_default] wordt opgegeven, worden deze aanwijzers standaard ingesteld op het kenmerk [unieke] wanneer de MIDL-compiler zich in Microsoft Extensions modus bevindt of het kenmerk [ptr] wanneer de MIDL-compiler zich in de DCE-compatibele modus bevindt.

Wanneer een externe procedure een aanwijzer retourneert, moet de retourwaarde een [unieke ] of volledige aanwijzer ([ ptr ]) zijn.

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

Opmerkingen

Gebruik altijd expliciete pointerkenmerken bij het definiƫren van een aanwijzer om eenduidig gedrag van aanwijzers te garanderen.

Het wordt aanbevolen om [ptr ] alleen te gebruiken wanneer aanwijzeralias vereist is.