嗨,我是 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 和线程的幼稚感到抱歉。