Проблемы с конверсией Delphi Unicode
У нас есть большое коммерческое приложение, которое мы хотим конвертировать из Delphi 6 в 2010 году. Приблизительно 10 сторонних компонентов, все с исходным кодом... Я слышал предупреждения о Unicode с 2010 года - Есть ли у кого-нибудь опыт и предложения?
Ответы
Ответ 1
Имеется много ресурсов, которые вы можете прочитать, и что вы будете помогать в миграции из Delphi 6 в Delphi 2009/2010 (Unicode).
Вы можете использовать эти статьи в качестве руководства.
Bye.
Ответ 2
Вы найдете несколько полезных ответов на эти вопросы StackOverflow:
Переместить проект с Delphi 3 на Delphi 2010
Когда и почему я должен использовать TStringBuilder?
Функция преобразования в Delphi 2009/2010 (Unicode)
Проблемы Unicode с Delphi 2009/2010 и вызовами Windows API
Кроме того, для чего это стоит, я купил Marco Cantu Delphi 2009 Handbook. Это было все, что мне было нужно, чтобы относительно гладко поговорить с Delphi 4 до Delphi 2009 всего за несколько недель.
![alt text]()
Тем не менее, я рекомендую вам убедиться, что ваши сторонние пакеты имеют обновление Delphi 2009, иначе у вас могут возникнуть реальные трудности. Преобразование вашего собственного кода это одно. Обращение кого-то другого - это другое.
Я использую два сторонних пакета, оба с исходным кодом. У обоих были доступные обновления, и разработчик одного из них написал, что у него было много проблем при обновлении его очень сложного компонента до Unicode of Delphi 2009. Ему потребовалось несколько месяцев, но он завершил его. И в результате у меня были небольшие проблемы с моей реализацией его компонента, когда я делал свое обновление.
Ответ 3
В последнее время я был в одном и том же обстоятельстве. вам в основном нужно обратить внимание на "края" приложения. INI файлы, файлы ввода-вывода, файлы журналов и т.д. Выигрывают вызовы API из работы delphi, поскольку они теперь подключили вызовы API Unicode. проверьте каждый сторонний компонент, чтобы убедиться, что они, по крайней мере, готовы к Delphi 2009... еще лучше 2010. Даже мое использование баз данных просто не было проблемой... почти все сразу сработало. это просто не было большой проблемой. все, что зависит от размера персонажа, должно быть пересмотрено.
на самом деле переход от большинства проблем - 2007_or_earlier → 2009_or_later.
в нем много дискуссий/записей в блогах. вы можете читать, читать, читать... или вы можете начать и посмотреть, что произойдет. (я сделал некоторые из них). Я уверен, что есть проблемы с переполнением стека, которые обсуждают ваш вопрос. я не претендую на подробное описание того, что может произойти.
это просто не так страшно, как кажется.
Ответ 4
Приблизительно 10 сторонних компонентов, все с исходным кодом.
Я бы добавил, что если компонент не поддерживает Delphi 2009/2010, не пытайтесь его обновить, взломав код.
Следующее, что я написал в Как работают новые типы строк в Delphi 2009/2010?:
Смотрите Delphi и Unicode, белую книгу, написанную Марко Канти, и я думаю Абсолютный минимум Каждый разработчик программного обеспечения Абсолютно, положительно должен знать о Unicode и наборах символов (никаких оправданий!), написанных Джоэлом.
Одна ошибка заключается в том, что вызов по умолчанию Win32 API был отображен для использования версии W (широкая строка) вместо версии A (ANSI), например ShellExecuteA
Если ваш код выполняет сложный код указателя, предполагая внутреннюю компоновку AnsiString
, он сломается. Резерв должен заменить PChar
на PAnsiChar
, Char
на AnsiChar
, string
на AnsiString
и добавить A в конце вызова API Win32 для этой части кода. После того, как код действительно компилируется и запускается нормально, вы можете реорганизовать свой код на использование string
(UnicodeString
).
Ответ 5
Я должен добавить эту статью от Кэри Дженсена другим людям. Он помечен как "Delphi Unicode Migration for Mere Mortals: рассказы и советы из Front Line" (на английском языке).
http://www.danysoft.com/free/delphiunicodemigration.pdf
Как вы можете видеть в названии, вы найдете много опыта и советов. Я думаю, что это ответ на ваш вопрос. После тщательного ознакомления с этим вы наверняка знаете, что делать дальше.:)
Найдено в: http://www.danysoft.com/productos/migrar-aplicaciones-a-delphi-xe-o-cbuilder-xe.html
Ответ 6
Еще один момент, который нужно позаботиться, - это использование типов Variant со строками и тестирование функции VarType для строк: нужно использовать varUString вместо varString.
Предполагая, что AValue имеет тип Variant и ему присвоено строковое значение Unicode, следующее не будет работать:
if VarType(AValue) = varString then ...
и его необходимо изменить на
if VarType(AValue) = varUString then ...