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の標準戻り値と、次の値を返すことができます。
リターン コード | 説明 |
---|---|
|
このスレッドで COM ライブラリが正常に初期化されました。 |
|
COM ライブラリは、このスレッドで既に初期化されています。 |
|
以前の CoInitializeEx の呼び出しでは、このスレッドのコンカレンシー モデルがマルチスレッド アパートメント (MTA) として指定されました。 これは、ニュートラルスレッドアパートメントからシングルスレッドアパートメントへの変更が発生したことを示している可能性もあります。 |
解説
標準アロケーターとメモリ割り当て関数へのポインターを取得するには、 CoGetMalloc を除くライブラリ関数のいずれかを呼び出す前に、スレッドで COM ライブラリを初期化する必要があります。
スレッドのコンカレンシー モデルを設定した後は、変更できません。 以前にマルチスレッドとして初期化されたアパートメントで CoInitialize を呼び出すと失敗し、RPC_E_CHANGED_MODEが返されます。
CoInitializeEx は 、CoInitialize と同じ機能を提供し、スレッドのコンカレンシー モデルを明示的に指定するパラメーターも提供します。 CoInitialize は CoInitializeEx を 呼び出し、コンカレンシー モデルをシングル スレッド アパートメントとして指定します。 今日開発されたアプリケーションでは、CoInitialize ではなく CoInitializeEx を呼び出す必要があります。
通常、COM ライブラリはスレッドで 1 回だけ初期化されます。 同じスレッドで CoInitialize または CoInitializeEx に対する後続の呼び出しは、コンカレンシー モデルの変更を試みずにS_FALSEを返す限り成功します。 COM ライブラリを正常に閉じるには、CoInitialize または CoInitializeEx (S_FALSEを返すものも含む) の呼び出しが成功するたびに、CoUninitialize への対応する呼び出しとバランスを取る必要があります。 ただし、0 を指定して CoInitialize を呼び出すアプリケーションの最初のスレッド (または COINIT_APARTMENTTHREADED の CoInitializeEx ) は 、CoUninitialize を呼び出す最後のスレッドである必要があります。 それ以外の場合、STA での CoInitialize の後続の呼び出しは失敗し、アプリケーションは機能しません。
インプロセス サーバーの読み込みまたはアンロードの順序を制御する方法がないため、DllMain 関数から CoInitialize、CoInitializeEx、または 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 で導入) |