Директивы компилятора - Delphi Versions - PullRequest
10 голосов
/ 25 ноября 2011

У меня есть модуль, который я написал в Delphi 7 некоторое время назад, и я только что получил удовольствие (боль) от конвертации в Delphi XE (Unicode).

Модуль работает после некоторой проблемы, теперь я пытаюсь сделать его совместимым с различными версиями Delphi, если мне когда-нибудь потребуется переключить IDE обратно на Delphi 7 при обновлении некоторого другого кода.

У меня есть только Delphi 7 и Delphi XE, но из того, что я соберу, будет скомпилирован код, написанный в Delphi 1 для Delphi 2007, но код из Delphi 2009 и выше будет Unicode.

... В любом случае, в Юните я разделяю не-юникод и юникод так:

{$IFDEF VER150} //Delphi 7
// code
{$ELSE IFDEF VER220} //Delphi XE
// code
{$ENDIF}

Как мне изменить директиву компилятора, чтобы правила распространялись на несколько версий? Например что-то вроде:

{$IFDEF VER80,  //D1
        VER90,  //D2
        VER100, //D3
        VER120, //D4
        VER130, //D5
        VER140, //D6
        VER150, //D7}

Это будет охватывать все версии Delphi, если я распространю исходный код или модуль .dcu.

Спасибо.

Ответы [ 2 ]

15 голосов
/ 25 ноября 2011

Интересно, проще ли в этом случае переключить поведение на условное выражение UNICODE?Это условие определяется тогда и только тогда, когда вы используете версию Delphi для Unicode, то есть в Delphi 2009 и более поздних версиях.Большим преимуществом этого является то, что это перспектива на будущее - вам не нужно обновлять свой код каждый раз, когда выходит новый Delphi.Более того, условное переключение будет гораздо более читабельным, поскольку оно четко выражает намерение.

В документации Delphi есть отличная тема , в которой перечислены все предопределенные условные выражения.Полный список условий версий также связан оттуда.

5 голосов
/ 25 ноября 2011

Лучше всего посмотреть на один из множества проектов JEDI, например, http://sourceforge.net/projects/jedi-apilib/ и посмотреть, как они это делают.У них есть общие включаемые файлы, которые содержат именно те детали, которые вас интересуют. JVCL - еще один хороший выбор ...

...