Delphi Conversion Unicode Проблемы
У нас есть большое коммерческое приложение, которое мы хотим преобразовать из Delphi 6 в 2010 г. Приблизительно 10 сторонних наборов компонентов, все с исходным кодом... Я слышал предупреждения о Unicode с 2010 г. - У кого-нибудь есть опыт и предложения?
6 ответов
Есть много доступных ресурсов, которые вы можете прочитать и которые помогут в переходе с Delphi 6 на Delphi 2009/2010 (Unicode).
Вы можете использовать эти статьи в качестве руководства.
- Unicode Migration Statistics Tool (надеюсь, эта утилита поможет вам собрать полезную статистику о том, насколько сложно (или нет) было бы перенести ваши старые приложения в Unicode.)
- Delphi 2009 и Unicode
- Строки Delphi 2009, объясненные на примере
- Обновление крупного проекта до Delphi 2009
- Delphi и Unicode
- Доктор Боб Дельфи 2009 Юникод
- Delphi 2009 - Unicode в библиотеках типов
- О строках и Unicode в Delphi 2009
- Delphi в мире Unicode. Часть I: что такое Unicode, зачем он вам нужен и как вы работаете с ним в Delphi?
- Delphi в мире Unicode, часть II: новые функции и классы RTL для поддержки Unicode
- Delphi в мире Unicode, часть III: Unicodification Your Code
- CodeRage 4: Использование 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 ...