微软输入法 日语汉字转假名 IFELanguage,过多的汉字(大于100)转化失败

dexin9713 2011-03-02 04:18:52
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)总是失败,少一些的汉字没有问题?
...全文
154 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dexin9713 2011-03-04
  • 打赏
  • 举报
回复
api GetPhonetic 有限制,字符串不够太长
dexin9713 2011-03-03
  • 打赏
  • 举报
回复
为什么没有人,有情高手帮忙,共同研究。

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧