Типы указателей по умолчанию
Для указателей не требуется явное описание атрибута. Если явный атрибут не указан, компилятор MIDL использует атрибут указателя по умолчанию.
По умолчанию для неатрибуированных указателей используются следующие варианты:
- Указатели верхнего уровня, отображаемые в списках параметров, по умолчанию — указатели [ссылка].
- Все остальные указатели по умолчанию указывают на тип, заданный атрибутом [pointer_default]. Если атрибут [pointer_default] не указан, эти указатели по умолчанию используют атрибут [ unique ], если компилятор MIDL находится в режиме расширений Майкрософт , или атрибут [ptr], когда компилятор MIDL находится в режиме, совместимом с DCE.
Когда удаленная процедура возвращает указатель, возвращаемое значение должно быть [ unique ] или полным ([ 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.
}
Комментарии
Чтобы обеспечить однозначное поведение атрибута указателя, всегда используйте явные атрибуты указателя при определении указателя.
Рекомендуется использовать [ptr] только в том случае, если требуется псевдоним указателя.