CoInitializeとCoUninitialize

CoInitializeとCoUninitializeの呼び出しについてのメモ。
仕事でCOMに泣かされたので^^;

ペアで呼び出す

CoInitializeとCoUninitializeはペアで呼び出す必要がある。
基本的にスレッドの開始でCoInitialize、スレッドの終了でCoUninitializeを呼び出せば問題ない

同じ回数だけ呼び出す

なぜ、ペアで呼び出す必要があるのか、それはどうやら内部的にカウンタを持っているようで、 CoInitializeを呼び出した回数文だけ、CoUninitializeを呼び出す必要がある。
その為、必ずペアで呼び出さないといけない。

最後のCoUninitializeでメモリが解放される

例えば、MSXMLを利用し、XMLを読み込んだとする。
IXMLDOMxxxには解放関数Releaseがありますが、Release関数を呼び出しただけではメモリは解放されない模様。
最後のCoUninitializeを呼び出すことで初めてメモリの解放が行なわれる。
その為、一度に多くのXMLを扱うようなプログラムの場合は、スレッドの開始と終了よりも、XMLの処理の開始と終了に CoInitializeとCoUninitializeを呼び出すようにするのが望ましい。