[英]Delphi - E2010 Incompatible types: 'Integer' and 'Char' - Any ideas
I've been tasked with porting a legacy Delphi application over to C# .Net. 我的任务是将旧版Delphi应用程序移植到C#.Net。 The original delphi developer left several months before I was hired.
最初的delphi开发人员离开了我才被雇用了几个月。 I'm receiving the:
我收到的是:
E2010 Incompatible types: 'Integer' and 'Char' error
E2010不兼容的类型:“整数”和“字符”错误
for the below method. 用于以下方法。 I'm trying to compile the application within the Delphi 2007 IDE, I've been told that original application is either Delphi 4 or 5 if that helps any.
我试图在Delphi 2007 IDE中编译该应用程序,有人告诉我原始应用程序是Delphi 4或5,如果有帮助的话。 I understand what the error is telling me but I don't understand why\\how it is applied to the code snippet below.
我知道错误告诉我什么,但我不明白为什么/如何将其应用于下面的代码段。 Any help\\direction would be greatly appreciated.
任何帮助\\方向将不胜感激。
Thanks in advance - not sure if I've over done it on the code. 在此先感谢您-不知道我是否已在代码上完成此操作。
Upper definition: 上定义:
Upper: array[1..256] of Char =
(#$00,#$01,#$02,#$03,#$04,#$05,#$06,#$07,#$08,#$09,#$0A,#$0B,#$0C,#$0D,#$0E,#$0F,
#$10,#$11,#$12,#$13,#$14,#$15,#$16,#$17,#$18,#$19,#$1A,#$1B,#$1C,#$1D,#$1E,#$1F,
#$20,#$21,#$22,#$23,#$24,#$25,#$26,#$27,#$28,#$29,#$2A,#$2B,#$2C,#$2D,#$2E,#$2F,
#$30,#$31,#$32,#$33,#$34,#$35,#$36,#$37,#$38,#$39,#$3A,#$3B,#$3C,#$3D,#$3E,#$3F,
#$40,#$41,#$42,#$43,#$44,#$45,#$46,#$47,#$48,#$49,#$4A,#$4B,#$4C,#$4D,#$4E,#$4F,
#$50,#$51,#$52,#$53,#$54,#$55,#$56,#$57,#$58,#$59,#$5A,#$5B,#$5C,#$5D,#$5E,#$5F,
#$60,#$41,#$42,#$43,#$44,#$45,#$46,#$47,#$48,#$49,#$4A,#$4B,#$4C,#$4D,#$4E,#$4F,
#$50,#$51,#$52,#$53,#$54,#$55,#$56,#$57,#$58,#$59,#$5A,#$7B,#$7C,#$7D,#$7E,#$7F,
#$80,#$81,#$82,#$83,#$84,#$85,#$86,#$87,#$88,#$89,#$8A,#$8B,#$8C,#$8D,#$8E,#$8F,
#$90,#$91,#$92,#$93,#$94,#$95,#$96,#$97,#$98,#$99,#$9A,#$9B,#$9C,#$9D,#$9E,#$9F,
#$A0,#$A1,#$A2,#$A3,#$A4,#$A5,#$A6,#$A7,#$A8,#$A9,#$AA,#$AB,#$AC,#$AD,#$AE,#$AF,
#$B0,#$B1,#$B2,#$B3,#$B4,#$B5,#$B6,#$B7,#$B8,#$B9,#$BA,#$BB,#$BC,#$BD,#$BE,#$BF,
#$C0,#$C1,#$C2,#$C3,#$C4,#$C5,#$C6,#$C7,#$C8,#$C9,#$CA,#$CB,#$CC,#$CD,#$CE,#$CF,
#$D0,#$D1,#$D2,#$D3,#$D4,#$D5,#$D6,#$D7,#$D8,#$D9,#$DA,#$DB,#$DC,#$DD,#$DE,#$DF,
#$E0,#$E1,#$E2,#$E3,#$E4,#$E5,#$E6,#$E7,#$E8,#$E9,#$EA,#$EB,#$EC,#$ED,#$EE,#$EF,
#$F0,#$F1,#$F2,#$F3,#$F4,#$F5,#$F6,#$F7,#$F8,#$F9,#$FA,#$FB,#$FC,#$FD,#$FE,#$FF);
function StrIComp_JOH_PAS_1(const Str1, Str2: PChar): Integer;
var
Ch1, Ch2 : Char;
Offset : Integer;
PStr : PChar;
begin;
PStr := Str1;
Offset := Str2 - PStr;
repeat
Ch1 := Upper[PStr^];
Ch2 := Upper[PStr[Offset]];
if (Ch1 = #0) or (Ch1 <> Ch2) then
Break;
Inc(PStr);
until False;
Result := Integer(Ch1) - Integer(Ch2);
end;
The code that you have has had an incorrect modification made to the Upper
constant. 您对上面的代码没有正确修改
Upper
常量。 It should be: 它应该是:
Upper: array[Char] of Char = ....
Of course, even better would be to simply throw this routine away and use the version of StrIComp
that is shipped with Delphi in the SysUtils
unit. 当然,更好的将是简单地抛出这个例程拿走并使用的版本
StrIComp
是在随德尔福SysUtils
单位。 There seems little point in grappling with this when simply deleting the code will result in a program that is correct. 当简单地删除代码将导致程序正确时,解决此问题似乎毫无意义。
Since you are porting this to C# you can simply use String.Compare
and pass true
to the ignoreCase
parameter. 由于将其移植到C#,因此您可以简单地使用
String.Compare
并将true
传递给ignoreCase
参数。
Thanks to @Ulrich for recognising that this code originates from the FastCode project. 感谢@Ulrich认识到此代码源自FastCode项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.