Delphi2009不识别#162,为什么???(50)

  • 主题发起人 主题发起人 batconv
  • 开始时间 开始时间
B

batconv

Unregistered / Unconfirmed
GUEST, unregistred user!
函数GetHzPy是提取汉字拼音首字母的(论坛上的帖子),在D2007下运行正常,今天装上D2009尝尝鲜,却发现执行到“#162:”这一行时出错,无法继续执行,提示信息:[DCC Error]PY.pas(1371): E2030 Duplicate case label 。请高手帮忙看看解释一下,谢谢。function GetHzPy(HzChar: PChar; Len: Integer): String; var C: Char; Index: Integer; begin Result := ''; if (Len > 1) and (HzChar[0] >= #129) and (HzChar[1] >= #64) then begin case HzChar[0] of #163: begin C := Chr(Ord(HzChar[1]) - 128); if C in ['a'..'z', 'A'..'Z', '0'..'9', '(', ')', '[', ']'] then Result := C else Result := ''; end; #162: begin if HzChar[1] > #160 then Result := CharIndex[Ord(HzChar[1]) - 160] else Result := ''; end; #166: begin if HzChar[1] in [#$A1..#$B8] then Result := CharIndex2[Ord(HzChar[1]) - $A0] else if HzChar[1] in [#$C1..#$D8] then Result := CharIndex2[Ord(HzChar[1]) - $C0] else Result := ''; end; else begin Index := PyCodeIndex[Ord(HzChar[0]) - 128, Ord(HzChar[1]) - 63]; if Index = 0 then Result := '' else Result := PyMusicCode[Index]; end; end; end else if Len > 0 then begin if HzChar[0] in ['a'..'z', 'A'..'Z', '0'..'9', '(', ')', '[', ']', '.', '!', '@', '#', '$', '%', '^', '&', '*', '-', '+', '<', '>', '?', ':', '"'] then Result := HzChar[0] else Result := ''; end; end;
 
类型Char改为AnsiChar试试
 
function GetHzPy(HzChar: PAnsiChar; Len: Integer): String;
 
原因找到了,是盒子论坛上的朋友帮忙的,但是不知道如何解决问题!原因:HzChar[0] 是char类型 其取值范围为-127 128这个代码是没法拿到d2009下重用的,原来的代码是以gbk/gb18030为基础的,d2009已经完全unicode了,或者是自定义个type GBString = type AnsiString(54936); // gb18030的代码页来使用至于#162的问题,在d2009下为了避免#n(127<n<256)的二义性问题,最好用 AnsiChar(n) 的形式来写。btw,我还是忍不住鄙视迁移d2009架构的方法,还有这个导致二义性的bug
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
702
SUNSTONE的Delphi笔记
S
S
回复
0
查看
697
SUNSTONE的Delphi笔记
S
A
回复
2
查看
543
后退
顶部