汉字转换为拼音的代码

汉字转换为拼音的代码

ID:38634599

大小:55.50 KB

页数:8页

时间:2019-06-16

汉字转换为拼音的代码_第1页
汉字转换为拼音的代码_第2页
汉字转换为拼音的代码_第3页
汉字转换为拼音的代码_第4页
汉字转换为拼音的代码_第5页
汉字转换为拼音的代码_第6页
汉字转换为拼音的代码_第7页
汉字转换为拼音的代码_第8页
资源描述:

《汉字转换为拼音的代码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、'***************************************************************************'*MODULENAME:HzToPy'*AUTHOR&DATE:tt.t'*03Apirl2007'*DESCRIPTION:将中文字符串转换为拼音,就这些~'*有汉字得到拼音其实并不是我很关心的一个问题,只是发现已经公开'*的方法有很大的缺陷,但WORD却做得很好,因此才尝试解决这个问题。'*过程比我预期的要曲折的多,主要是VBA实在是一种很受限制的语言。'*不过好在有Google和Olldbg,难题也仅仅是如

2、何找到绕过限制的途径,'*终于在5个小时内搞定了一切~'*时间比我预计的长了很多,因为我实在是不了解VBA,也不很熟悉OLE:"('*不过好在一切都解决了~~终于从VBA小白成长了一些。'*其实VBA也是很强大的~'*'*Theory:废话了好多还是说说原理吧,虽然不是每个人都很关心~'*WORD的拼音向导能够将汉字转成拼音全是倚仗微软拼音的帮助,'*微软拼音2.0以上版本都提供了汉字到拼音的转换功能。'*微软拼音MSIME.China类中的IFELanguage接口具体实现了转换功能'*不过MSIME.China中没有提供IDispatch接口,VBA的Crea

3、teObject不支持'*调用这样的类,因此我们只好手工调用。CoCreateInstance可以创建类'*并获取IFELanguage接口,但我们无法直接调用,因为VBA不知道如何调用'*IFELanguage接口的Method。这里困扰了我好久,原本希望能向其他语言那样'*声明接口结构,但VBA并不支持。万般无奈下只好在OLE相关DLL中寻找,期待能'*找到代理函数简介调用接口的Method。呵呵~功夫不负苦心人终于在OLEAUT32中'*找到了DispCallfunc。Google了一下,果然是我需要的。接口知道了,如何调用也'*清楚了,剩下的问题就是如何取

4、得转换后的结果。IFELanguage.GetMorphResult会将'*转换的结果存在一个叫做tagMORRSLT的结构中,并返回指向tagMORRSLT的指针。'*新问题又来了,VBA不支持指针...sigh,为什么其他语言很容易实现的功能VBA用起来'*就这么烦呢~幸好VBA读取内存的限制也好突破,只需调用ntdll的RtlMoveMemory。'*好了~一切限制都已解除,HzToPy终于正常工作了~~'*说起来一切顺理成章,可是寻找解决方法的过程真的很痛苦,不过VBA经验值大涨也算有所收获。'*下面就让代码来说话吧。'*'*Memo:改成类了,加入了拼音

5、间加入分隔符和去掉注音的功能,请参照“模块1”中的例子,用起来很简单:)8'*更正了一个错误,redim时vba数组默认起始搞错了'*'***************************************************************************OptionExplicitPublicEnumPhoneticNotationpnDefault=0pnNoNotation=1EndEnumPrivateTypeGUIDData1AsLongData2AsIntegerData3AsIntegerData4(0To7)AsByt

6、eEndTypePrivateTypeTinyMORRSLTdwSizeAsLongpwchOutputAsLongcchOutputAsIntegerEndTypePrivateDeclareSubMoveMemoryLib"kernel32"Alias"RtlMoveMemory"_(DestinationAsAny,SourceAsAny,ByValLengthAsLong)PrivateDeclareFunctionCoCreateInstanceLib"ole32"(_rclsidAsGUID,ByValpUnkOuterAsLong,_ByValdwC

7、lsContextAsLong,riidAsGUID,_ByRefppvAsLong)AsLongPrivateDeclareFunctionDispCallFuncLib"oleaut32"_(ByValpvInstanceAsLong,ByValoVftAsLong,_ByValccAsLong,ByValvtReturnAsInteger,_ByValcActualsAsLong,prgvtAsInteger,_prgpvargAsLong,pvargResultAsVariant)AsLongPrivateDeclareSubCoTaskMemFreeLi

8、b"ole

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。