既定のポインター型
ポインターは、明示的な属性の説明を持つ必要はありません。 明示的な属性が指定されていない場合、MIDL コンパイラは既定のポインター属性を使用します。
属性が設定されていないポインターの既定のケースは次のとおりです。
- パラメーター リストに表示される最上位ポインターは、既定で [ref] ポインターになります。
- その他のすべてのポインターは、[pointer_default] 属性で指定された型に既定で設定されます。 [pointer_default] 属性が指定されていない場合、MIDL コンパイラが MICROSOFT Extensions モードの場合 は [unique] 属性、MIDL コンパイラが DCE 互換モードの場合は [ptr] 属性が既定で指定されます。
リモート プロシージャがポインターを返す場合、戻り値は [一意の] または完全 ([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] は、ポインターのエイリアシングが必要な場合にのみ使用することをお勧めします。