Как я могу явно установить квартиру объекта в IClassFactory :: CreateInstance вместо того, чтобы использовать квартиру текущего потока

Я пытаюсь зарегистрировать фабрику пользовательских классов в 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, &regNum);
{
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.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]