2012-04-13 3 views
1

Мне поручено перенести унаследованное приложение Delphi на C# .Net. Первоначальный разработчик delphi покинул несколько месяцев, прежде чем я был нанят. Я получаю:Delphi - E2010 Несовместимые типы: «Целое число» и «Символ» - любые идеи

E2010 Несовместимые типы: 'Integer' и ошибки

'Чара' для метода ниже. Я пытаюсь скомпилировать приложение в Delphi 2007 IDE, мне сказали, что оригинальное приложение - это Delphi 4 или 5, если это помогает. Я понимаю, что ошибка говорит мне, но я не понимаю, почему \ как это применяется к фрагменту кода ниже. Любая помощь \ направление будет принята с благодарностью.

Заранее спасибо - не уверен, что я закончил это с кодом.

Upper определение:

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; 

ответ

3

Код, который у вас был, имеет неправильную модификацию, указанную в константе Upper. Оно должно быть:

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

Конечно, еще лучше было бы просто бросить эту рутину прочь и использовать версию StrIComp, который поставляется вместе с Delphi в SysUtils блоке. Кажется мало смысла в этом бороться, когда простое удаление кода приведет к правильной программе.


Так как вы переносите это на C# вы можете просто использовать String.Compare и передать true параметру ignoreCase.

Благодаря @Ulrich за то, что этот код исходит из проекта FastCode.

+0

+1 Я думаю, что «Верхний» определяется как «Верх: массив [Char] Char;» где каждый символ будет «верхний» – ComputerSaysNo

+0

@dorin, который будет компилироваться. Скорее всего, массив [char] целого числа –

+0

может быть, почему вы так думаете? – ComputerSaysNo

2

Есть Const Верхний определение в модуле паскаль? Если нет, получите его от here

+0

Кроме того, я думаю, что Char и PChar нужно будет заменить на AnsiChar и PAnsiChar с более новыми версиями Delphi (D2009 +) –

+0

Да, это правильно, и верхний стол не имеет значения. – MBo

+0

@J ... zeencat, похоже, использует ANSI Delphi, 2007 –

Смежные вопросы