Я пытаюсь зарегистрировать фабрику пользовательских классов в 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.
Задача ещё не решена.
Других решений пока нет …