实现汉字拼音码首字母的动态库

时间:2022-05-22 08:02:39

    实现汉字拼音码首字母查询的方法大致有如下几种:1、根据汉字内码码查询,2、根据微软拼音输入法查询,3、自建拼音码数据库。本文仅简单列出第一种方式的源码(其中主要源码来自网上,仅为了做成动态库供其它语言调用略作修改,在此对作者表示感谢!)。

//文件名:Py.dpr   将所有内容复制到记事本里,然后另存为Py.dpr,用delphi打开编译即可得到py.dll文件

 library Py;

// 用于查询汉字拼音码首字母的动态库  大漠  2005.11

//开发工具:delphi7 

uses
  SysUtils,
  Classes;

{$R *.res}
Function GetPy(HzChar:Pchar):char;export;stdcall    //返回汉字的首拼音
var
  HzSS:String;
begin
  HzSS:=String(HzChar);

  case WORD(HzSS[1])shl(8)+WORD(HzSS[2]) of
    $B0A1..$B0C4 : result:='A';
    $B0C5..$B2C0 : result:='B';
    $B2C1..$B4ED : result:='C';
    $B4EE..$B6E9 : result:='D';
    $B6EA..$B7A1 : result:='E';
    $B7A2..$B8C0 : result:='F';
    $B9C1..$B9FD : result:='G';
    $B9FE..$BBF6 : result:='H';
    $BBF7..$BFA5 : result:='J';
    $BFA6..$C0AB : result:='K';
    $C0AC..$C2E7 : result:='L';
    $C2E8..$C4C2 : result:='M';
    $C4C3..$C5B5 : result:='N';
    $C5B6..$C5BD : result:='O';
    $C5BE..$C6D9 : result:='P';
    $C6DA..$C8BA : result:='Q';
    $C8BB..$C8F5 : result:='R';
    $C8F6..$CBF9 : result:='S';
    $CBFA..$CDD9 : result:='T';
    $CDDA..$CEF3 : result:='W';
    $CEF4..$D188 : result:='X';
    $D189..$D4D0 : result:='Y';
    $D4D1..$D7F9 : result:='Z';
  else
    result:=char(0);
  end;
end;

exports
     GetPy;
begin
end.

以下是VB调用示例

'新建一标准exe工程,向主窗体中加入两个文本框,分别命名为:txtHz txtPy,加入一命令按钮,命名为:cmdTest   caption属性设置为"测试"

Option Explicit
'函数声明(调试时应把Dll路径换成绝对路径,编译时应改为相对路径)
Private Declare Function GetPy Lib "Py.dll" (ByVal sHz As String) As Byte

Private Sub cmdTest_Click()
Dim i As Integer
Dim n As Integer
Dim sHz As String


sHz = txtHz.Text
n = Len(sHz)

txtPy.Text = ""
If n > 0 Then
    For i = 0 To n - 1
          txtPy.Text = txtPy.Text + Chr(GetPy(Mid(sHz, i + 1, 1)))
    Next
End If
End Sub

Private Sub Form_Load()
txtHz.Text = "你是风儿我是沙"
txtPy.Text = ""
End Sub