次の方法で共有


3 つのポインター型

MIDL では、さまざまなアプリケーションに対応するために、3 種類のポインターがサポートされています。 3 つの異なるレベルは参照、一意、完全なポインターと呼ばれ、それぞれ [ref][unique]、および [ptr]属性によって示されます。 これらの属性によって記述されるポインター クラスは、相互に排他的です。 ポインター属性は、型定義内のポインター、関数の戻り値の型、関数パラメーター、構造体または共用体のメンバー、または配列要素に適用できます。

埋め込みポインターは、構造体または共用体のメンバーであるポインターです。 配列の要素にすることもできます。 ] 方向の [では、埋め込み [ref] ポインターは有効なストレージを指していると見なされ、null にすることはできません。 この状況は、指しているポインター [ref] に再帰的に適用されます。 [in] 方向では、埋め込まれた [unique] と完全ポインター ([ptr] 属性を持つポインター) は null の場合とそうでない場合があります。

関数宣言の構文でパラメーターに配置されたポインター属性は、そのパラメーターの右端のポインター宣言子にのみ影響します。 他のポインター宣言子に影響を与えるためには、中間の名前付き型を使用する必要があります。

ポインターを返す関数は、ポインター属性を関数属性として持つことができます。 [unique][ptr] 属性は、関数の戻り値の型に適用する必要があります。 ポインターであるメンバー宣言では、ポインター属性をフィールド属性として指定できます。 ポインター属性は、typedefコンストラクト型属性として適用することもできます。

ポインター属性がフィールド属性または型属性として指定されていない場合、ポインター属性は、次のように、属性なしのポインター宣言の規則に従って適用されます。

DCE 互換モードでは、ポインター属性は定義 IDL ファイルで決定されます。 定義インターフェイスに [pointer_default**]** 属性が指定されている場合は、その属性が使用されます。 [pointer_default] 属性が存在しない場合、属性が割り当てられていないポインターはすべて完全なポインターになります。

Microsoft 拡張機能モードでは、IDL ファイルをインポートすることによってポインター属性を決定でき、次の順序で適用されます。

  1. 使用サイトで適用される明示的なポインター属性。
  2. 属性 [ref] 属性です。属性は、属性が割り当てられていないポインターが最上位のポインター パラメーターである場合です。
  3. [pointer_default] 定義インターフェイスで指定された属性です。
  4. 基本インターフェイスで指定された [pointer_default] 属性。
  5. [unique] 属性。

[pointer_default] インターフェイス属性は、宣言に明示的なポインター属性が適用されていない場合に、型、パラメーター、または戻り値の型宣言のポインター宣言子に適用される既定のポインター属性を指定します。 [pointer_default] インターフェイス属性は、パラメーターの属性に適用されません。パラメーターの最上位ポインターは、[ref]と見なされます。