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.