Delphi Conversion Unicode Проблемы

У нас есть большое коммерческое приложение, которое мы хотим преобразовать из Delphi 6 в 2010 г. Приблизительно 10 сторонних наборов компонентов, все с исходным кодом... Я слышал предупреждения о Unicode с 2010 г. - У кого-нибудь есть опыт и предложения?

6 ответов

Есть много доступных ресурсов, которые вы можете прочитать и которые помогут в переходе с Delphi 6 на Delphi 2009/2010 (Unicode).

Вы можете использовать эти статьи в качестве руководства.

До свидания.

Вы найдете несколько полезных ответов на эти вопросы Stackru:

Переместить проект с Delphi 3 на Delphi 2010

Когда и почему я должен использовать TStringBuilder?

Функция преобразования в delphi 2009/2010 (Unicode)

Проблемы Unicode с Delphi 2009 / 2010 и вызовами Windows API

Кроме того, за то, что оно того стоит, я купил Delphi 2009 Handbook Марко Канту. Это было все, что мне было нужно для относительно гладкой беседы от Delphi 4 до Delphi 2009 всего за несколько недель.

http://www.marcocantu.com/dh2009/D2009Handbook_small.jpg

Однако я рекомендую вам убедиться, что ваши сторонние пакеты обновлены до Delphi 2009, иначе у вас могут возникнуть реальные трудности. Преобразование вашего собственного кода это одно. Преобразование кого-то другого это другое.

Я использую два сторонних пакета, оба с исходным кодом. У обоих были доступные обновления, и разработчик одного из них написал, что у него было много проблем при обновлении его очень сложного компонента до Unicode of Delphi 2009. Ему потребовалось несколько месяцев, но он завершил его. И в результате у меня были небольшие проблемы с моей реализацией его компонента, когда я делал свое обновление.

Я должен добавить эту статью от Кэри Дженсен к другим упомянутым. Он помечен как "Миграция Delphi в Юникоде для простых смертных: истории и советы с передовой" (на английском языке). http://www.danysoft.com/free/delphiunicodemigration.pdf

Как видно из названия, вы найдете много впечатлений, подсказок и советов. Я думаю, что это ответ на ваш вопрос. Внимательно прочитав его, вы обязательно будете знать, что делать дальше.:)

Найдено в: http://www.danysoft.com/productos/migrar-aplicaciones-a-delphi-xe-o-cbuilder-xe.html

Приблизительно 10 сторонних наборов компонентов, все с исходным кодом.

Я бы добавил, что если компонент не поддерживает Delphi 2009/2010, не пытайтесь обновить его, взломав код.

Вот что я опубликовал на Как работают новые типы строк в Delphi 2009/2010?:

См. Delphi и Unicode, технический документ, написанный Marco Cantù, и я предполагаю, что Абсолютный Минимум, Каждый Разработчик Программного Обеспечения Абсолютно, Должен Знать Об Юникоде и Наборах символов (Никаких оправданий!), Написанный Джоэлем.

Одна ловушка заключается в том, что вызов API Win32 по умолчанию был сопоставлен с использованием версии W (широкая строка) вместо версии A (ANSI), например ShellExecuteA Если ваш код выполняет сложный код указателя, предполагая, что внутреннее расположение AnsiString, это сломается. Резервный способ заменить PChar с PAnsiChar, Char с AnsiChar, string с AnsiStringи добавьте A в конце вызова Win32 API для этой части кода. После того, как код на самом деле скомпилируется и работает нормально, вы можете изменить свой код для использования string (UnicodeString).

Я был в том же положении недавно. Вам в основном нужно обратить внимание на "края" приложения. INI-файлы, файловый ввод-вывод, файлы журналов и т. Д. Выигрывают вызовы API от delphi, так как теперь они вместо этого подключили вызовы unicode API. проверьте каждый набор компонентов сторонних производителей, чтобы убедиться, что они, по крайней мере, готовы к Delphi 2009... еще лучше 2010. даже мое использование баз данных просто не было проблемой... почти все сразу работало. это просто не имело большого значения. все, что зависит от размера персонажа, должно быть пересмотрено.

на самом деле переход наибольший интерес вызывает 2007_or_earlier -> 2009_or_later.

Есть много дискуссий / записей в блоге об этом. Вы могли бы читать, читать, читать... или вы могли бы начать и посмотреть, что происходит. (Я сделал некоторые из обоих). Я уверен, что есть проблемы с переполнением стека, обсуждающие ваш вопрос. Я не претендую на подробное описание того, что могло бы произойти.

это просто не так страшно, как кажется.

Еще один момент, о котором следует позаботиться, - это использование типов Variant со строками и тестирование функции VarType для строк: необходимо использовать varUString вместо varString.

Предполагая, что AValue имеет тип Variant и ему присвоено строковое значение Unicode, следующее не будет работать:

  if VarType(AValue) = varString then ...

и должен быть изменен на

  if VarType(AValue) = varUString then ...
Другие вопросы по тегам