微软输入法 日语汉字转假名 IFELanguage,过多的汉字(大于100)转化失败
LPCWSTR msime = L"MSIME.Japan";
CLSID clsid;
IFELanguage *pIFELanguage = NULL;
BSTR BStrOut = NULL;
BSTR BStrIn = NULL;
AnsiString ansResult = "";
AnsiString ansKJRet = "";
WCHAR *wword;
try
{
OleInitialize(NULL);
if ( CLSIDFromString(const_cast<LPWSTR>(msime),&clsid) == S_FALSE )
{
return ansResult;
}
if ( CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,
IID_IFELanguage2,(LPVOID*)&pIFELanguage) != S_OK )
{
return ansResult;
}
if( !pIFELanguage )
{
return ansResult;
}
if ( pIFELanguage->Open() != S_OK )
{
pIFELanguage->Release();
return ansResult;
}
ansStr = "管理機!~@#$%^&*()_+=-099238467{}[]:;'?/>.<,|\\\||機能能,アカウント,設定で前";
setlocale(LC_ALL, "");
DWORD dwNum = MultiByteToWideChar (CP_ACP, 0, ansStr.c_str(), -1, NULL, 0);
dwNum = dwNum;
wword= (WCHAR*)calloc(dwNum,sizeof(WCHAR));
memset(wword, 0, dwNum*sizeof(WCHAR));
MultiByteToWideChar( CP_ACP, 0, ansStr.c_str(), -1, wword, dwNum ) ;
BStrIn = SysAllocString(wword);
if ( pIFELanguage->GetPhonetic(BStrIn,1,-1,&BStrOut) != S_OK )
{
pIFELanguage->Close();
pIFELanguage->Release();
return ansResult;
}
ansKJRet = BStrOut;
free(wword);
::SysFreeString(BStrIn);
::SysFreeString(BStrOut);
pIFELanguage->Close();
pIFELanguage->Release();
CoUninitialize();
return ansKJRet;
}
catch (...)
{
return ansResult;
}
请教高手,我用GetPhonetic函数,转换汉字,为什么过多的汉字(大于100)总是失败,少一些的汉字没有问题?