オブジェクト属性
[object] インターフェイス属性は、COM インターフェイスを識別します。 ( [object] 属性を含まないインターフェイス属性リストは、DCE RPC インターフェイスを示します)。
[
object,
uuid(string-uuid)
[ , interface-attribute-list]
]
interface interface-name : base-interface
{
...
}
パラメーター
-
string-uuid
-
Uuidgen ユーティリティによって生成される UUID 文字列。 UUID 文字列は引用符で囲むことができます。
-
interface-attribute-list
-
インターフェイス全体に適用されるその他の属性。
-
interface-name
-
インターフェイスの名前。
-
base-interface
-
このインターフェイスの派生元となる COM インターフェイス。 基本インターフェイスは、 IUnknown、 IDispatch、または IUnknown または IDispatch から直接または間接的に派生する別の COM インターフェイスである必要があります。
解説
COM インターフェイスのインターフェイス属性リストには [uuid] 属性を含める必要がありますが、[version]属性を含めることはできません。
既定では、MIDL コンパイラを使用して COM インターフェイスをコンパイルすると、プロキシ DLL のビルドに必要なファイルが生成されます。 この DLL には、クライアント アプリケーションとオブジェクト サーバーの両方によるカスタム COM インターフェイスの使用をサポートするコードが含まれています。 ただし、COM インターフェイスのインターフェイス属性リストで [local] 属性が指定されている場合、MIDL コンパイラはインターフェイス ヘッダー ファイルのみを生成します。
MIDL コンパイラは、COM インターフェイスのインターフェイス データ型を自動的に生成します。 代わりに、インターフェイス キーワード (keyword)で typedef を使用して、インターフェイス データ型を明示的に定義することもできます。 インターフェイス仕様では、関数パラメーターと戻り値、 構造体 と 共用体 のメンバー、およびその他の型宣言でインターフェイス データ型を使用できます。 次の例は、自動的に生成された IStream データ型の使用を示しています。
[
object,
uuid (ABCDEFOO-1234-1234-5678-ABCDEF123456)
]
interface IStream : IUnknown
{
typedef IStream * LPSTREAM;
// Other interface definition statements.
}
COM インターフェイスでは、すべてのインターフェイス メンバー関数が仮想関数であると見なされます。 仮想関数には、最初のパラメーターとして 暗黙的なこの ポインターがあります。 仮想関数テーブルには、各インターフェイス メンバー関数のエントリが含まれています。
[ローカル]以外のオブジェクト インターフェイス メンバー関数には、HRESULT または SCODE の戻り値が必要です。 (以前のバージョンの MIDL では、メンバー関数が void を返すことができました。ただし、MIDL バージョン 3.0 以降では、 void を返すとコンパイラ エラーが発生します)。HRESULT または SCODE の戻り値を指定すると、リモート呼び出し中に例外が生成された場合、生成されたプロキシは例外をキャッチし、戻り値で例外コードを返します。 アプリケーションがリモート プロシージャ 呼び出し中に発生したエラーを無視できる場合は、呼び出し後に戻り値を確認せずに、戻り値の型として HRESULT を指定できます。
古いアプリケーションを再コンパイルする場合、戻り値の型を変更すると、サーバーが新しく導入された結果をクライアントに送信するときに下位互換性の問題が発生する可能性があります。 戻り値の型を変更する代わりに、 void を返す関数に [call_as] 属性を付けて、ローカル関数にすることができます。 次に、同じパラメーターと HRESULT の戻り値の型を使用して、関連するリモート関数を定義します。 ローカル関数は、必要に応じて、その HRESULT 値に基づいて例外を発生させることができます。
MIDL コンパイラ /osf スイッチを使用してコンパイルする場合、[object] 属性は使用できません。
例
[
uuid(12345678-1234-1234-1234-123456789ABC),
object
]
interface IMyInterface : IUnknown
{
// Interface definition statements.
}
[
uuid(87654321-1234-1234-1234-123456789ABC),
object,
local
]
interface ILocalInterface : ISomeOldCOMInterface
{
// Interface definition statements.
}
関連項目