Преобразование Char в AnsiChar или WideChar (Delphi)

Я обновляю очень старое (10+ лет) приложение до последней версии Delphi XE. Есть ряд ошибок, которые я продолжаю получать

Incompatible types: 'WideChar' and 'AnsiChar'

Я просто приводил char к нужному типу: ex. AWideChar = WideChar(fncReturnsChar);

Это вызовет проблемы?


person Daisetsu    schedule 14.02.2011    source источник
comment
В XE вы не можете получить сообщение об ошибке, о котором вы сообщаете, поскольку WideChar и Char являются одним и тем же. Я думаю, вам нужно показать еще немного кода.   -  person David Heffernan    schedule 15.02.2011
comment
Кроме того, читали ли вы различные руководства о том, как переключиться на Unicode в Delphi? В частности, я считаю, что есть очень полезный официальный документ Марко Канту.   -  person David Heffernan    schedule 15.02.2011
comment
@David Упомянутая мной ошибка не была вырезана и вставлена, я хотел сказать «AnsiChar» вместо «Char». Благодаря ссылке, опубликованной Микаэлем, я прочитал статью и теперь понимаю, что WideChar=Char. Я тоже должен поблагодарить вас за вашу помощь, так что вот голос.   -  person Daisetsu    schedule 15.02.2011


Ответы (2)


Там могут быть проблемы для вас. Вот официальный документ по Unicode в Delphi, написанный Марко Канту.

http://edn.embarcadero.com/article/38980

person Mikael Eriksson    schedule 14.02.2011
comment
Ничего себе, в этом НАМНОГО больше, чем я изначально думал. Спасибо за ссылку, Марко всегда делает это так легко для понимания. - person Daisetsu; 15.02.2011
comment
@Daisetsu Да, побитовые операции тоже легко понять, но необходимость понимать внутренности системы, чтобы выполнять простые арифметические операции, является обвинением в качестве реализации. Подобному техническому дерьму не место в RAD IDE. Дело даже не в софте, а в прошивке, как функции 3D-графики на видеокартах. Опять слепой ведет слепого! - person Sam; 24.10.2013
comment
Неверный запрос (недопустимое имя хоста) - person Fabrizio; 15.09.2020

var
    Initials: String[10];
    FullName: String;

begin

    Initials[1] := FullName[1]; // Error here after Delphi 2009

end;

Проблема в том, что String[10] — это тип AnsiString в более поздних версиях Delphi. Вы собираетесь назначить символ Unicode символу ANSI в приведенном выше коде.

Решение представляет собой простое приведение типа:

Initials[1] := AnsiChar(FullName[1]);

Пожалуйста, обратитесь к документу, рекомендованному в ответе Микаэля Эрикссона. Это очень важно.

person Suren Sarathkumara    schedule 18.07.2012