Delphi Ansistrings - PullRequest
       55

Delphi Ansistrings

1 голос
/ 24 февраля 2011

У меня есть случай, я собираюсь перейти на Delphi 2011 XE из Delphi 7, и, к моему удивлению, многие компоненты будут иметь проблемы из-за рассогласования, в delphi xe они выглядят как символы японского и китайского языков, теперь это модульЯ использую разъем PCSC и, кажется, его больше не используют или не используют в оригинальном разработчике.

В основном то, что я хочу, - это простой способ снова читать строки с минимальным изменением исходного кода.

также, если есть хорошие уроки о том, как сделать компоненты, готовые к выпуску в 2009 году и более новые, мне тоже помогут

Ответы [ 2 ]

9 голосов
/ 24 февраля 2011

@ Plastkort, Delphi> = 2009 прекрасно умеет читать и обрабатывать AnsiString.Вы получаете бессмысленные символы только в том случае, если вы каким-то образом жестко преобразуете данные ANSI в Unicode, возможно, путем точного приведения указателя на PChar.

Если бы мне пришлось преобразовать чужой код в Unicode, я бы начал с поискаPChar, Char и String, особенно в тех местах, где другие типы жестко преобразуются в эти типы.Это связано с тем, что эти типы изменили значение: в не-Unicode delphi значение CHAR составляло 1 байт, а теперь - 2 байта.

Само преобразование не обязательно сложное, вам просто нужно понять проблему, с которой вы столкнулись, и вынужно иметь хорошее понимание кода, который вы конвертируете.И это большая работа, особенно когда дело касается кода, который делает «умные вещи со строками».

1 голос
/ 24 февраля 2011

Большое изменение в Delphi (думаю, до Delphi 2009) - это псевдонимы строковых типов; string, Char, PChar и т. д., к которым в 2009 году относились типы строк ANSI, теперь все типы WideChar.

так

Type   | Delphi 6,7 | Delphi 2009, XE
-------+------------+----------------
string | AnsiString | UnicodeString
char   | AnsiChar   | WideChar
pchar  | PAnsiChar  | PWideChar

Самый простой способ перехода с Ansi Delphi на Unicode Delphi - это глобальный поиск и замена псевдонимов строковых типов, которые заменяют их явными 8-битными эквивалентами ANSI (т.е. заменяют всю строку на AnsiString, PChar на PAnsiChar и т. Д.). .)

Это должно дать вам 90% пути.


обновление Прочитав комментарии к моему ответу и к статье, на которую ссылается @ O.D Я думаю, что совет откусить пулю и использовать Unicode - более разумный вариант.

...