CLR控制台和MFC中的CoInitiallize()函数的问题。
我在前者的中,使用COM组件没有用::CoInitialize(NULL);程序编译通过,并且通过调用COM实现发音;代码如下:
ISpVoice *pVoice=NULL;
/*if(FAILED(::CoInitialize(NULL)));
return FALSE;*/
HRESULT hr=CoCreateInstance(CLSID_SpVoice,NULL,CLSCTX_ALL,IID_ISpVoice,(void**)&pVoice);
if(SUCCEEDED(hr))
{
hr=pVoice->Speak(L"Hello, World",0,NULL);
pVoice->Release();
pVoice=NULL;
}
::CoUninitialize();
我在后者的程序中,则必须加入这个“::CoInitialize(NULL);”,才能发音,代码如下:
ISpVoice *pVoice=NULL;
::CoInitialize(NULL);
HRESULT hr=CoCreateInstance(CLSID_SpVoice,NULL,CLSCTX_ALL,IID_ISpVoice,(void**)&pVoice);
if(SUCCEEDED(hr))
{
hr=pVoice->Speak(L"Hello, World",0,NULL);
pVoice->Release();
pVoice=NULL;
}
::CoUninitialize();
最后搜索了一下MSDN,解释是“ Applications must initialize the COM library before they can call COM library functions other than CoGetMalloc and memory allocation functions. ”既然如此,那么在控制台的程序中为何能实现调用COM实现发音呢?
[解决办法]
.net内部自动初始化了。
[解决办法]
看看 Main 函数的
STAThreadAttribute。