简体   繁体   English

Delphi-E2010不兼容的类型:“整数”和“字符”-任何想法

[英]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项目。

Is there const Upper definition in your pascal module? 您的pascal模块中是否有const Upper definition? If not, get it from here 如果没有,请从这里获取

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM