Delphi Ansistrings

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

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

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

2 ответа

Решение

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

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

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

Большое изменение в 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% пути.


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

Другие вопросы по тегам