Standardzeigertypen
Zeiger müssen keine explizite Attributbeschreibung aufweisen. Wenn kein explizites Attribut angegeben wird, verwendet der MIDL-Compiler ein Standardzeigerattribut.
Die Standardfälle für nicht attributierte Zeiger sind die folgenden:
- Zeiger der obersten Ebene, die in Parameterlisten angezeigt werden, werden standardmäßig auf [ ] verweiszeigert.
- Alle anderen Zeiger werden standardmäßig auf den Vom [ _ Zeigerstandardattribut angegebenen Typ ] festgelegt. Wenn kein [ _ Zeigerstandardattribut angegeben wird, verwenden ] diese Zeiger standardmäßig das [ eindeutige ] Attribut, wenn sich der MIDL-Compiler im Microsoft-Erweiterungsmodus befindet, oder das [ ptr-Attribut, ] wenn sich der MIDL-Compiler im DCE-kompatiblen Modus befindet.
Wenn eine Remoteprozedur einen Zeiger zurückgibt, muss der Rückgabewert ein [ eindeutiger ] oder 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.
}
Hinweise
Um ein eindeutiges Zeigerattributverhalten sicherzustellen, verwenden Sie beim Definieren eines Zeigers immer explizite Zeigerattribute.
Es wird empfohlen, [ ptr ] nur zu verwenden, wenn Zeigeraliasing erforderlich ist.