Výchozí typy ukazatelů
Ukazatele nemusí mít explicitní popis atributu. Pokud není zadaný explicitní atribut, kompilátor MIDL používá výchozí atribut ukazatele.
Výchozí případy pro nepřipojené ukazatele jsou následující:
- Ukazatele nejvyšší úrovně, které se zobrazují v seznamech parametrů, mají výchozí hodnotu [odkaz] ukazatelů.
- Všechny ostatní ukazatele jsou výchozí pro typ určený atributem [pointer_default]. Pokud není zadán atribut [pointer_default], jsou tyto ukazatele výchozí atribut [ jedinečný ] v případě, že kompilátor MIDL je v režimu rozšíření Microsoft Extensions nebo [ptr] atribut, pokud je kompilátor MIDL v režimu kompatibilním s DCE.
Pokud vzdálený postup vrátí ukazatel, návratová hodnota musí být [ jedinečný ] nebo úplný ([ ptr ]).
/* 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.
}
Poznámky
Pokud chcete zajistit jednoznačné chování atributu ukazatele, vždy při definování ukazatele používejte explicitní atributy ukazatele.
Doporučujeme použít [ptr] pouze v případě, že je vyžadován aliasování ukazatele.