当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:56:00  来源:本站整理

操纵IFELanguage脱离中文语句并对汉字加注拼音[VC/C++编程]

赞助商链接



  本文“操纵IFELanguage脱离中文语句并对汉字加注拼音[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

这篇文档是讲若何操纵IFELanguage接口实现对中文语句的脱离,并对词语和字加注拼音的办法.

首先感激一下Zswang(伴水)兄弟,他的无私奉献精神和对Windows的深化研究值得我们每一个人学习.每次找到好东东他老是给我一份,包含这个IFELanguage接口资料.最初的资料源自一个日本网站,源代码是用VC8写的,Zswang(伴水)将其改写为一个实用于Delphi下的版本.原C++代码经ccrun(老妖)略作改正,在BCB6下调试通过.原VC8的版本和BCB6还有Zswang(伴水)写的Delphi例子代码都一同打包并上传到[通例代码]区,有爱好的朋友可以下载了研究一下.

首先需求初始化OLE:

#include<ole2.h>

OleInitialize(NULL);

当然,记的在程序完毕的时刻清场:

CoUninitialize();

我们需一个C++下用的msime.h或Delphi下的msime.pas(感激Zswang),这个文件里包含了IFELanguage接口,IFECommon接口等声明,还有一些常量和构造的声明,好在已经有人替我们做了这部份工作.^_^你只需下载了利用便可以.

#include"msime.h"

//定义IFELanguage接口的IID
staticconstIIDIID_IFELanguage=
{
   0x019f7152,0xe6db,0x11d0,
   {0x83,0xc3,0x00,0xc0,0x4f,0xdd,0xb8,0x2e}
};
//指定利用的语言,我们的例子利用简体中文,其他还有:
//MSIME.China
//MSIME.Japan
//MSIME.Taiwan
//MSIME.Taiwan.ImeBbo
LPCWSTRmsime=L"MSIME.China";
CLSID  clsid;
if(CLSIDFromString(const_cast<LPWSTR>(msime),&clsid)!=S_OK)
// 本文转自 C++Builder 研究 - http://www.ccrun.com/article.asp?i=1028&d=r0j832
   return;
//成立一个IFELanguage的COM实例,得到接口指针
IFELanguage*pIFELanguage;
if(CoCreateInstance(clsid,NULL,CLSCTX_SERVER,
     IID_IFELanguage,(LPVOID*)&pIFELanguage)!=S_OK)
   return;
if(!pIFELanguage)
   return;
//翻开
if(pIFELanguage->Open()!=S_OK)
{
   pIFELanguage->Release();
   return;
}
//
DWORDdwCaps;
if(pIFELanguage->GetConversionModeCaps(&dwCaps)!=S_OK)
{
   pIFELanguage->Close();
   pIFELanguage->Release();
}
//要解析的中文句子
WideStringwstrInput=WideString("汉字加拼音演示妖哥万岁");
MORRSLT*pmorrslt;
//通过GetJMorphResult办法为汉字加注拼音
if(pIFELanguage->GetJMorphResult(
     FELANG_REQ_REV,
     FELANG_CMODE_PINYIN|
     FELANG_CMODE_NOINVISIBLECHAR,
     wstrInput.Length(),wstrInput,NULL,&pmorrslt)!=S_OK)
{
   pIFELanguage->Close();
   pIFELanguage->Release();
}
if(!pmorrslt)
{
   pIFELanguage->Close();
   pIFELanguage->Release();
}
//将句子脱离成词语并单独加注拼音
WideStringwstrOutput,wstrWord,wstrPinYin;
wstrOutput=WideString(pmorrslt->pwchOutput);
wstrOutput=wstrOutput.SubString(1,pmorrslt->cchOutput);
//pmorrslt->cWDD是脱离后单词的个数(英文单词一个字母算一个)
for(inti=0;i<pmorrslt->cWDD;i++)
{
   //读取每段的词语或字
   wstrWord=wstrInput.SubString(
       pmorrslt->pWDD[i].wReadPos+1,
       pmorrslt->pWDD[i].cchRead);
   //读取每段的拼音
   wstrPinYin=wstrOutput.SubString(
       pmorrslt->pWDD[i].wDispPos+1,
       pmorrslt->pWDD[i].cchDisp);
   //
   if(wstrPinYin.Length()>0)
     wstrWord=wstrWord+"("+wstrPinYin+")";
   //输出后果,我这里仅仅是输出到一个Memo中,在你的利用中记的更改此处,不然编译不过期你又有设法了.
   Memo1->Lines->Add(wstrWord);
}
//记的清场咯
CoTaskMemFree(pmorrslt);
pIFELanguage->Close();
pIFELanguage->Release();

附件中有一个IMEEngine类,原作者大概是个日本程序员.类里仅仅实现了GetJMorphResult的封装,大家可以按照自己的需求自己扩大一下.貌似可以获得汉字的笔画,假如你完成了这部份功效,但愿能将代码给我一份: cbfans#163.com,谢谢.


  以上是“操纵IFELanguage脱离中文语句并对汉字加注拼音[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 操纵IFELanguage脱离中文语句并对汉字加注拼音
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .