こんにちは、COM初心者です。STA モードと MTA モードの両方で COM dll をテストしたいと考えています。最初の質問は、COM オブジェクトが STA と MTA の両方をサポートすることは可能ですか?
ここで、以下の STA コード スニペットを想像します。
// this is the main thread
m_IFoo;
CoInitializeEx(STA); // initialize COM in main thread
CreateInstance(m_IFoo);
m_IFoo->Bar();
CreateThread(ThreadA);
// start ThreadA
// this is secondary thread
ThreadA()
{
CoInitializeEx(STA);
m_IFoo->Buz(); // call m_IFoo's method directly
}
このコードは機能しますか? 基本的なことが欠けていますか?他のスレッドからの呼び出しを実行できるようにするには、メイン スレッドにウィンドウ メッセージ ループが必要であることはわかっています。私はそれについて何かしなければなりませんか?
次に、MTA のテストに進みます。上記のコードの「STA」を「MTA」に置き換えるだけで機能しますか?</p>
別の質問: GUI を使用するスレッドは STA でなければならないため、GUI スレッドで MTA を初期化してテストすることはできませんか?
事前に感謝し、COM とスレッドについて素朴で申し訳ありません。