Конвертация для выпуска Unphode Delphi 2009 - PullRequest
0 голосов
/ 23 января 2010

Я конвертировал старое приложение из Delphi 7 в Delphi 2009. Я получил эту ошибку: E2010 Несовместимые типы: 'Char' и 'AnsiChar' Как я могу это исправить? Я пытался объявить Алфавит: Ansistring [AlphabetLength], но это не удалось.

const
  AlphabetLength = 64;
  Alphabet: string[AlphabetLength] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

function TBase64.ValueToCharacter(value: Byte; var character: char): boolean;
begin
  Result := true;
  if (value > AlphabetLength-1) then
    Result := false
  else
// Compile error E2010 Incompatible types: 'Char' and 'AnsiChar'
    character := Alphabet[value+1];
end;    

function TBase64.CharacterToValue(character: char; var value: byte): boolean;
begin
  Result := true;
  value := Pos(character, Alphabet);
  if value = 0 then
    Result := false
  else
    value := value-1;
end;

Ответы [ 2 ]

4 голосов
/ 23 января 2010

Избегайте использования устаревшего типа ShortString в версиях Unicode Delphi (2009 и более поздние версии):

const
  AlphabetLength = 64;
  Alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

вышеуказанного изменения должно быть достаточно. Вы также должны подумать о переходе от 1-байтовых AnsiChars к 2-байтовым символам.

edit (jeroen pluimers):

Вот некоторая документация по типам строк .

0 голосов
/ 23 января 2010

Вы можете просто использовать

Alphabet : String = 'ABCDEFGH...'?

Или, если вы уверены, что используете только символы ANSI (что, похоже, имеет место), вы можете просто разыграть:

character := Char (Alphabet [value+1]);

Похоже, что тип короткой строки использует AnsiChar внутри, даже в D2009 и выше.

...