描述:
程序里调用COM的地方如下:
IMN* CTServer::RegisterDriver(IDriver * pDriver)
{
IMN* pMN = NULL;
CoInitialize(NULL);
HRESULT hr = ::CoCreateInstance(CLSID_MN, NULL, CLSCTX_ALL, IID_MN, (void**)&pMN);
if ( SUCCEEDED(hr) )
{
....
}
else // should not happend
{
ASSERT(0);
}
}
return pMN;
}
问题是这样的:
当主程序启用一个线程调用这个,CoInitialize(NULL)返回的值为S_OK,hr的值也为S_OK;
当主程序启用俩个线程调用这个,在这先称为A,B线程,不论A,B,CoInitialize(NULL)和hr返回的值都为
E_NOINTERFACE,并且pMN指向为0!
怎么解决,若解决,分不够,将开另一个贴子给分!
解决方案1:
CoInitialize(NULL);
//IAudioTransPtr pat;
IRTPAudioPtr pat;
try
{
pat.CreateInstance(__uuidof(RTPAudio));
}
catch (...)
{
MessageBox(NULL, "初始化COM失败, 您将不能够完成有关语音的任何操作\15\12您可以重新安装程序来解决这个问题", "错误", MB_OK | MB_APPLMODAL | MB_ICONINFORMATION);
return 0;
}
你这样做看看
真的吗?你建com的时候的threadmode 是什么啊?