2012-04-13 15 views
1

Ich wurde damit beauftragt, eine ältere Delphi-Anwendung auf C# .Net zu portieren. Der ursprüngliche Delphi-Entwickler ist einige Monate vor meiner Einstellung gegangen. Ich erhalte die:Delphi - E2010 Inkompatible Typen: 'Integer' und 'Char' - Irgendwelche Ideen

E2010 Inkompatible Typen: 'Integer' und 'Char' Fehler

für die folgenden Verfahren. Ich versuche, die Anwendung innerhalb der Delphi 2007 IDE zu kompilieren, mir wurde gesagt, dass die ursprüngliche Anwendung entweder Delphi 4 oder 5 ist, wenn das hilft. Ich verstehe, was der Fehler mir sagt, aber ich verstehe nicht warum \ wie es auf das Code-Snippet unten angewendet wird. Jede Hilfe \ Richtung würde sehr geschätzt werden.

Vielen Dank im Voraus - nicht sicher, ob ich es über den Code getan habe.

Ober 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; 

Antwort

3

Der Code, den Sie haben, hat eine falsche Änderung an der Konstante Upper gemacht. Es sollte sein:

Upper: array[Char] of Char = .... 

Natürlich, auch wäre besser, einfach diese Routine wegzuwerfen und die Version von StrIComp verwenden, die mit Delphi im SysUtils Einheit ausgeliefert wird. Es scheint wenig sinnvoll zu sein, sich damit zu befassen, wenn das Löschen des Codes zu einem korrekten Programm führt.


Da Sie dies zu C# portieren können Sie einfach String.Compare verwenden und true zum ignoreCase Parameter übergeben.

Dank @Ulrich für die Erkennung, dass dieser Code aus dem FastCode-Projekt stammt.

+0

+1 Ich denke "Upper" ist definiert als "Upper: Array [Char] von Char;" wo jeder char wird "oberer" – ComputerSaysNo

+0

@dorin, die kompilieren würde. Wahrscheinlicher Array [char] von Integer –

+0

könnte sein, warum denkst du? – ComputerSaysNo

2

Gibt es const Ober Definition in Ihrem pascal-Modul? Wenn nicht, holen Sie es von here

+0

Auch ich denke, Char und PChar müssen in AnsiChar und PAnsiChar mit neueren Versionen von Delphi (D2009 +) geändert werden –

+0

Ja, das ist richtig, und Upper-Tabelle wird irrelevant sein. – MBo

+0

@J ... zeencat scheint ein ANSI zu verwenden Delphi, 2007 –

Verwandte Themen