次の方法で共有


CoGetDefaultContext 関数 (combaseapi.h)

指定したアパートメントの既定のコンテキストへの参照を取得します。

構文

HRESULT CoGetDefaultContext(
  [in]  APTTYPE aptType,
  [in]  REFIID  riid,
  [out] void    **ppv
);

パラメーター

[in] aptType

要求される既定のコンテキストのアパートメントの種類。 このパラメーターには、次の値のいずれかを指定できます。

意味
APTTYPE_CURRENT
-1
呼び出し元のアパートメント。
APTTYPE_MTA
1
現在のプロセスのマルチスレッド アパートメント。
APTTYPE_NA
2
現在のプロセスのニュートラル アパートメント。
APTTYPE_MAINSTA
3
現在のプロセスメインシングルスレッド アパートメントです。
 

APTTYPE 値APTTYPE_STA (0) はサポートされていません。 プロセスには、それぞれが独自のコンテキストを持つ複数のシングル スレッド アパートメントを含めることができるため、 CoGetDefaultContext はどの STA が関心を持つのかを判断できませんでした。 したがって、APTTYPE_STAが指定されている場合、この関数はE_INVALIDARGを返します。

[in] riid

既定のコンテキストで要求されているインターフェイスのインターフェイス識別子 (IID)。 通常、呼び出し元はIID_IObjectContextを要求します。 既定のコンテキストでは、すべての通常のオブジェクト コンテキスト インターフェイスがサポートされているわけではありません。

[out] ppv

既定のコンテキストで riid によって指定されたインターフェイスへの参照。 オブジェクトのコンポーネントが構成されていない場合(つまり、オブジェクトのコンポーネントが COM+ アプリケーションにインポートされていない)、またはコンストラクターまたは IUnknown メソッドから CoGetDefaultContext 関数が呼び出された場合、このパラメーターは NULL ポインターに設定されます。

戻り値

このメソッドは、次の値を返すことができます。

リターン コード 説明
S_OK
メソッドは正常に完了しました。
E_INVALIDARG
いずれかのパラメーターが無効です。
CO_E_NOTINITIALIZED
呼び出し元が初期化されたアパートメントにありません。
E_NOINTERFACE
オブジェクト コンテキストは 、riid で指定されたインターフェイスをサポートしていません。

解説

すべての COM アパートメントには、既定のコンテキストと呼ばれる特別なコンテキストがあります。 既定のコンテキストは、ランタイム サービスを提供しないため、アパートメント内の他のすべての既定以外のコンテキストとは異なります。 すべての通常のオブジェクト コンテキスト インターフェイスがサポートされているわけではありません。

既定のコンテキストは、スレッド モデルをサポートしていないアパートメントから作成された場合に、構成されていない COM コンポーネント (つまり、COM+ アプリケーションの一部ではないコンポーネント) のインスタンスでも使用されます。 つまり、COM オブジェクトが構成されていないコンポーネントのインスタンスを作成し、そのスレッド モデルのために新しいオブジェクトを作成者のコンテキストに追加できない場合、新しいオブジェクトは代わりにスレッド モデルをサポートするアパートメントの既定のコンテキストに追加されます。

オブジェクトは、 IObjectContext 参照を別のオブジェクトに渡さないでください。 IObjectContext 参照を別のオブジェクトに渡すと、有効な参照ではなくなります。

オブジェクトが IObjectContext への参照を取得する場合は、 IObjectContext オブジェクトの終了時に解放する必要があります。

要件

   
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー combaseapi.h
Library Ole32.lib
[DLL] Ole32.dll

関連項目

COM+ コンテキストとスレッド モデル