Как я могу явно установить квартиру объекта в 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.

0 ответов

Другие вопросы по тегам