閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

マルチスレッドでの COM の扱い方

メインスレッド以外のスレッドで IXMLDOMDocumentPtr::CreateInstance を呼び出すと失敗してしまうのですが、マルチスレッドで COM(MSXML?) を使う上で何かやらなきゃいけないことなどがあるのでしょうか?

検索してもいまひとつ見つからない……。思いつきでスレッド作成時にそのスレッド内で Coinitialize 呼んだら動いてしまったけれど、これで良いのかも謎。

……と、書きながら検索していたら次のようなページを発見。

  • COMを利用するスレッド毎に呼び出さなければならない
  • CoUninitialize関数と対に呼び出さなければならない

どうやら合っていたようです。これで安心して先に進めます。というか、大元の Windows SDK のヘルプを見たほうが早いんじゃないかとも思いますが、検索してもヒットしなかったのですっ飛ばしてます。手元にほしいなぁ、 MSDN ……。