我正在尝试使用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中的当前线程。