我正在尝试使用 CoRegisterClassObject 注册一个自定义类工厂,并且该工厂需要能够同时处理 STA 和 MTA 对象。我注意到 IClassFactory::CreateInstance 使用 CoInitializeEx 为当前线程指定的任何线程模型。有没有办法在不同的公寓中创建对象并以某种方式将其编组回当前公寓?例如,
CoInitializeEx(NULL, COINIT_MULTITHREADED);
CustomClassFactory *factory = new CustomClassFactory();
DWORD regNum = 0;
CLSID clsid = __uuidof(TestComObjLib::TestComObjCoClass);
CoRegisterClassObject(clsid, factory, CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, ®Num);
{
TestComObjLib::ITestComObjPtr ptr;
HRESULT hr = ptr.CreateInstance(clsid, NULL);
if(ptr){
auto str = ptr->HelloWorld();
cout << str << endl;
}
}
CoRevokeClassObject(regNum);
CoUninitialize();
如果 TestComObjCoClass 需要是单线程的,我希望能够在 CustomClassFactory::CreateInstance 中做一些事情,可以在 STA 中创建对象并将其编组到 MTA 中的当前线程。