インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
このトピックは、Windows* にのみ適用されます。
オブジェクト・インターフェイスへのポインターを取得するには、そのオブジェクトの識別子を知る必要があります。
オブジェクトの識別により、別の開発グループによって作成された COM オブジェクトを使用することができます。オブジェクト・クラスを開発元に関係なく一意に識別するために、COM はグローバル一意識別子 (GUID) を使用しています。GUID は、空間と時間を超えた一意性が (すべての実用目的で) 保証される 16 バイトの整数値です。COM は GUID を使用して、オブジェクト・クラス、インターフェイス、および一意の識別を必要とするその他の要素を識別します。
オブジェクトのインスタンスを作成するには、オブジェクトの GUID を COM に伝えます。識別に 16 バイトの整数を使用することは、コンピューターにとっては簡単なことですが、一般の開発者にとっては大変なことです。このため、COM はプログラム識別子 (ProgID) と呼ばれる、より精度の低いテキスト名もサポートします。ProgID の形式を次に示します。
application_name .object_name .object_version
モジュールウィザードによって生成されたルーチンを使用するには、オブジェクト・インターフェイスへのポインターを取得する必要があります。このポインターは、モジュールウィザードによって生成されるすべてのインターフェイスの第 1 引数である $OBJECT 引数の値として使用されます。
一般的に、COM ルーチンの COMCreateObject を呼び出して、オブジェクト・インターフェイスへの最初のオブジェクト・ポインターを取得します。COMCreateObject は、オブジェクト・クラスの新しいインスタンスを作成し、ポインターを返します。COMCreateObject は、2 つのサブルーチン COMCreateObjectByProgID と COMCreateObjectByGUID の総称です。
オートメーション・オブジェクトを作成するには、COMCreateObjectByProgID を使用します。このサブルーチンは、オブジェクトの progID を引数として受け取り、オブジェクトの IDispatch インターフェイスへのポインターを返します。
COM オブジェクトとオートメーション・オブジェクトの両方を作成するには、COMCreateObjectByGUID を使用します。このサブルーチンは、GUID を引数として受け取り、オブジェクトの IDispatch インターフェイスへのポインターを返します (オートメーションまたは COM のいずれか。以下を参照。)。
次に、COMCreateObjectByGUID に渡す引数を説明します。
第 1 引数は、オブジェクト・クラスを一意に識別するクラス識別子 (CLSID) です。モジュールウィザードはタイプ・ライブラリーから選択した各クラスに対して GUID 引数を定義します。これらのクラスには、次の形式の名前が付けられます: CLSID_class-name
第 2 引数は、呼び出しで許可するサーバーの種類を制限します。多くの場合、CLSCTX_ALL を使用してすべてのサーバーを許可します。
第 3 引数は、要求するオブジェクト・インターフェイスのインターフェイス識別子 (IID) です。
オートメーション・インターフェイスを要求するには、IID_IDispatch を使用します。
COM インターフェイスを要求するために、モジュールウィザードはタイプ・ライブラリーから選択した各インターフェイスに対して GUID 引数を定義します。これらのインターフェイスには、次の形式の名前が付けられます: IID_interface-name
第 4 引数は、オブジェクト・インターフェイスのポインターを返す出力引数です。
COMCreateObjectByProgID サブルーチンおよび COMCreateObjectByGUID サブルーチンは、サーバーが定義した外部から作成可能なオブジェクトのインターフェイスへのポインターを返します。ただし、すべてのオブジェクトが外部から作成できるというわけではありません。多くの場合、サーバーはオブジェクト階層 (またはオブジェクト・モデル) を実装します。COMCreateObject を呼び出すことで、階層のルート・オブジェクトのインターフェイスへのポインターを取得できます。ルート・オブジェクトのメソッドとプロパティーは、その子オブジェクトへのポインターを取得するために使用され、また、その子オブジェクトのメソッドとプロパティーは、階層のさらに下にある子オブジェクトへのポインターを取得するために使用されます。
すべてのオブジェクトは、IUnknown インターフェイスを実装しなければなりません。また、その他のインターフェイスも 1 つ以上実装します。COMQueryInterface サブルーチンを使用することによって、任意のオブジェクト・インターフェイスのポインターから、すべてのオブジェクト・インターフェイスへのポインターを常に取得できます。モジュールウィザードによって生成されたルーチンを呼び出す際は、適切なオブジェクト・インターフェイスへのポインターを取得することが重要になります。適切なポインターを取得しないと、アプリケーションが予期しない結果で終了する可能性が高くなります。
オブジェクト・インターフェイスのポインターを使用する作業が終了したら、そのポインターを指定して COMReleaseObject を呼び出す必要があります。COMCreateObject、COMQueryInterface、またはオブジェクトのメソッドを呼び出して取得したオブジェクト・ポインターが対象となります。