Подготовиться к Delphi 2009 и при разработке с Delphi 7?

Я разрабатываю дополнение Word в Delphi 7, но скоро я обновлю его до Delphi 2010, как Вы знаете, так как Delphi версии 2009 представляет новый строковый тип UnicodeString, который равняется строке ключевого слова. С другой стороны, согласно этому потоку мы должны использовать WideString для общения с COM.

Мой вопрос, что я должен сделать для подготовки к Delphi 2010 в будущем при текущей разработке в Delphi 7? В настоящее время в моем коде я использую пользовательский тип UnicodeString, идея состоит в том, что, когда компиляция с D7 моей строкой является WideString, когда компиляция с D2009 и это - UnicodeString, я вижу, что Виртуальный TreeView использует такую технику, как следующий код:

{$ifndef COMPILER_12_UP}
type
  UnicodeString = WideString;
  PByte = PAnsiChar;
{$endif COMPILER_12_UP}

5
задан Community 23 May 2017 в 12:18
поделиться

4 ответа

Шаг 1
Обычно вы должны придерживаться использования «нормальных» типов как можно дальше: i.e. String и Char
Таким образом, ваш код будет «автоматически» преобразован при обновлении.
ПРИМЕЧАНИЕ : Есть несколько исключений для приложений.

Если вы этого не сделаете, вы, вероятно, испытываете проблему, которую я имел при обновлении библиотеки кода, имевших в некоторых местах, используемых авсист. Это не проблема в старом Delphi, когда Ansistring = String. Но, очевидно, это было проблематично, когда типы больше не были одинаковыми.

Шаг 2
Прочитайте руководящие принципы, предусмотренные для миграции на Unicode Delphi 2009. Он упоминает функции, которые обычно подвергаются насилию при работе со строками, поскольку предполагается, что каждый символ составляет 1 байт. Обратите внимание на это и код в соответствии с этими рекомендациями.

Шаги 3, 4 и 5
Избегайте использования условной компиляции. Вы дадите себе больше головных болей.

Шаги 6, 7, 8, 9 и 10
Не пытайтесь вообще угадать компилятор путем переопределения его внутренних типов. Вы подвергаете себя многим головным болям. Дело в том, что VCL, во время выполнения библиотек и 3-я компоненты для вечеринок имеют «понимание» какого строки . «Новое понимание» все равно будет поделиться при обновлении до Delphi 2009.

Если вы измените это определение, то все могут работать в старой версии из-за неявной совместимости; Однако, скорее всего, ужасно нарушится, когда в Delphi 2009 вещей внезапно изменится.

Помните! Используемый тип строки является важным соображением с вызовами Windows API. Windows обычно поддерживает как ANSI, так и широкие версии большинства функций. У старых Delphi версии ANSI используются по умолчанию; А из Delphi 2009 широкие версии используются по умолчанию.

Примечания
относительно ваших проблем по расширению в разработке COM:
Старые версии Delphi обеспечивают автоматическую типограф между строкой и шириной - пусть ваш компилятор работает для вас, где это может. Очевидно, что ваши интерфейсы COM должны быть объявлены с широкоподведомлением, но старайтесь избегать чего-либо, кроме этого.

Редактировать
Взгляните на ссылку, предоставляемую Hughes: Будьте готовы к Delphi 2009 и выше при разработке с Delphi 7?

также просто подчеркивать: каждая новая версия Delphi пытается поддерживать некоторые Уровень обратной совместимости (включен Delphi 2009). Если вы просто хотите «нормально», вы вряд ли будут влиять на любую большую степень . На самом деле общение, как правило, верно; Чем больше Fancy Вы получаете, тем более вероятно, что вы должны столкнуться с проблемами.

Единственные серьезные проблемы, которые я когда-либо имел с переездом в новые версии Delphi:

  • 3-й партийный код / ​​библиотеки без исходного кода.
  • Неотложный 3-й партийный код, где их разработчики прибегали к различным кодированным «хитростям».
  • Код Мимаса в Delphi 3 был особенно трудным обновлением. (Но там опять же, разработчики в обход рекомендуемых методов были большим виновником.)
6
ответ дан 13 December 2019 в 22:08
поделиться
3
ответ дан 13 December 2019 в 22:08
поделиться

(нечетное объявление Pby of VST, вероятно, больше обходной путь для того, что {$ pointermath on} D2009, и вы не можете переоценить Pbyte в более низких версиях. Это, вероятно, не связано с Unicode)

0
ответ дан 13 December 2019 в 22:08
поделиться

Вы можете следовать одному простому правилу, которое заставит код, который вы пишете в Delphi 7, очень легко мигрировать в мир Юникода:

Не предполагайте нигде , что размер Шар равен 1.

Другими словами, всегда используйте

SizeOf(Char) вместо 1 в вашем коде.

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

1
ответ дан 13 December 2019 в 22:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: