CoInitialize 関数 (objbase.h)

現在のスレッドで COM ライブラリを初期化し、コンカレンシー モデルをシングル スレッド アパートメント (STA) として識別します。

新しいアプリケーションでは、 CoInitialize ではなく CoInitializeEx を 呼び出す必要があります。

Windows ランタイムを使用する場合は、代わりに RoInitialize または Windows::Foundation::Initialize を呼び出す必要があります。

構文

HRESULT CoInitialize(
  [in, optional] LPVOID pvReserved
);

パラメーター

[in, optional] pvReserved

このパラメーターは予約済みであり、 NULL である必要があります。

戻り値

この関数は、E_INVALIDARG、E_OUTOFMEMORY、E_UNEXPECTEDの標準戻り値と、次の値を返すことができます。

リターン コード 説明
S_OK
このスレッドで COM ライブラリが正常に初期化されました。
S_FALSE
COM ライブラリは、このスレッドで既に初期化されています。
RPC_E_CHANGED_MODE
以前の CoInitializeEx の呼び出しでは、このスレッドのコンカレンシー モデルがマルチスレッド アパートメント (MTA) として指定されました。 これは、ニュートラルスレッドアパートメントからシングルスレッドアパートメントへの変更が発生したことを示している可能性もあります。

解説

標準アロケーターとメモリ割り当て関数へのポインターを取得するには、 CoGetMalloc を除くライブラリ関数のいずれかを呼び出す前に、スレッドで COM ライブラリを初期化する必要があります。

スレッドのコンカレンシー モデルを設定した後は、変更できません。 以前にマルチスレッドとして初期化されたアパートメントで CoInitialize を呼び出すと失敗し、RPC_E_CHANGED_MODEが返されます。

CoInitializeEx、CoInitialize と同じ機能を提供し、スレッドのコンカレンシー モデルを明示的に指定するパラメーターも提供します。 CoInitializeCoInitializeEx を 呼び出し、コンカレンシー モデルをシングル スレッド アパートメントとして指定します。 今日開発されたアプリケーションでは、CoInitialize ではなく CoInitializeEx を呼び出す必要があります。

通常、COM ライブラリはスレッドで 1 回だけ初期化されます。 同じスレッドで CoInitialize または CoInitializeEx に対する後続の呼び出しは、コンカレンシー モデルの変更を試みずにS_FALSEを返す限り成功します。 COM ライブラリを正常に閉じるには、CoInitialize または CoInitializeEx (S_FALSEを返すものも含む) の呼び出しが成功するたびに、CoUninitialize への対応する呼び出しとバランスを取る必要があります。 ただし、0 を指定して CoInitialize を呼び出すアプリケーションの最初のスレッド (または COINIT_APARTMENTTHREADED の CoInitializeEx ) は 、CoUninitialize を呼び出す最後のスレッドである必要があります。 それ以外の場合、STA での CoInitialize の後続の呼び出しは失敗し、アプリケーションは機能しません。

インプロセス サーバーの読み込みまたはアンロードの順序を制御する方法がないため、DllMain 関数から CoInitializeCoInitializeEx、または CoUninitialize を呼び出さないでください。

要件

   
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー objbase.h
Library Ole32.lib
[DLL] Ole32.dll
API セット ext-ms-win-com-sta-l1-1-0 (Windows 10 バージョン 10.0.20166 で導入)

関連項目

CoInitializeEx