Standardpekartyper
Pekare krävs inte för att ha en explicit attributbeskrivning. När ett explicit attribut inte anges använder MIDL-kompilatorn ett standardpekarattribut.
Standardfallen för icke-distribuerade pekare är följande:
- Pekare på den översta nivån som visas i parameterlistor är som standard [referens] pekare.
- Alla andra pekare är standardtypen som anges av attributet [pointer_default] . När inget [pointer_default] -attribut anges är dessa pekare standardattributet [ unikt ] när MIDL-kompilatorn är i Microsoft-tillägg läge eller attributet [ptr] när MIDL-kompilatorn är i DCE-kompatibelt läge.
När en fjärrprocedur returnerar en pekare måste returvärdet vara en [ unik ] eller fullständig ([ ptr ]) pekare.
/* 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.
}
Anmärkningar
Använd alltid explicita pekarattribut när du definierar en pekare för att säkerställa ett entydigt beteende för pekarattribut.
Vi rekommenderar att [ptr] endast används när pekaralias krävs.