本記事は、COM Advent Calendar 2014 – Qiitaの2日目の記事です。
COMを使用するスレッドでは、CoInitializeEx/CoUninitializeなどを呼ばなければならないのはご存じと思います。実は結構種類があるので、その一覧をまとめてみようと思い立ちました。
- CoInitialize, CoInitializeEx / CoUninitialize
- 通常のCOM初期化・終了処理。CoInitializeは、CoInitializeExにCOINIT_APARTMENTTHREADEDを指定するのと同じ。
- OleInitialize / OleUninitialize
- STAスレッドとして初期化し、OLE用の追加処理を行う。
- RoInitialize / RoUninitialize
- Windows Runtime用の初期化を行う。現在のところMTA (RO_INIT_MULTITHREADED)しか指定できない。おそらくCoInitializeEx系の上位互換と思われる。Windows 8で追加された。
Windows 95でCoInitializeExを使うにはDCOM for Windows 95をインストールする必要がある、なんてことはもう過去の話ですね。
スレッドをどの種類のアパートメントに入らせることが可能かという分類で表にしてみます。
関数 | STA | MTA |
---|---|---|
CoInitializeEx系 | ○ | ○ |
OleInitialize系 | ○ | × |
RoInitialize系 | × | ○ |
Windows 8のWinRT APIで増えたASTAもあるのですが、ここに載せていません。RoInitializeやその他公開されている情報の限りでは、ASTA所属のスレッドは自分で作れないためです。
昨日と合わせて初期化関数の話を2つしたので、終了関数の話も2つしなければいけないのかなとちょっと思っています。
スレッド初期化・終了関数のまとめ is a post from: イグトランスの頭の中(のかけら)