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.