IXMLDocument
(msxmlラッパー)を使用しているときに、DLL機能内でCoInitialize
を使用する理由はありますか? (またはその他のcomオブジェクト)DLL内でIXMLDocumentを使用するにはCoInitializeが必要ですか?
呼び出し側のアプリケーション/スレッドは、CoInitialize/CoUninitialize
を呼び出していますか?
ComObj
をDLLの内部で使用すると、その初期化セクションでCoInitialize
が自動的に呼び出され、ファイナライズセクションでCoUninitialize
が自動的に呼び出されます。
しかし、DLLまたはDLL自体が使用するユニットの1つが間接的に "ComObj"ユニットを使用するとどうなりますか?もし私がそれにどのように取り組まなければならないのですか? – zig
より一般的なルールは次のとおりです。COMは、スレッドの作成者/所有者によってのみ初期化される必要があります。 DLLがCOM操作を実行するために独自のスレッドを作成する場合、DLLはそれらのスレッドのCOMを初期化します。 – IInspectable
@zigまあ、もしあれば?まったく問題はありません。呼び出し元は指示どおりにCOMを初期化します。そしてあなたのDLLは 'ComObj'の関数を使っても問題ありません。 DLLに 'ComObj'を使っても、COMは初期化されません。それはGUIアプリケーションでのみ発生します。 –