如何在IClassFactory :: CreateInstance中显式设置对象的公寓,而不是使用当前线程的公寓

时间:2013-07-15 19:02:56

标签: c++ com apartments

我正在尝试使用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 个答案:

没有答案