次の方法で共有


CoInitializeEx 関数が同じスレッドで HtmlHelp 関数を呼び出した後に失敗する

この記事では、同じスレッドで HtmlHelp 関数を呼び出した後に CoInitializeEx 関数が失敗する問題について説明します。

適用対象: サポートされているすべてのオペレーティング システム

現象

アプリケーションが COINIT_MULTITHREADED の値を指定して CoInitializeEx を呼び出す前に HtmlHelp を呼び出すと、CoInitializeExRPC_E_CHANGED_MODE (0x80010106) を返す場合があります。 その結果、アプリケーションがクラッシュしたり、ハングしたり、予期しない動作が表示されたりする可能性があります。

原因

HtmlHelp を呼び出すスレッドが CoInitialize または CoInitializeEx で初期化されていない場合、HtmlHelp はスレッドを COINIT_APARTMENTTHREADED でアパートメント スレッドとして初期化します。

回避策

この問題を回避し、1 つのスレッドで COM の初期化の競合を回避するには、新しいスレッドを作成し、そのスレッドで HtmlHelp を呼び出します。