В VCL есть несколько исправлений, для которых были найдены обходные пути. Есть ли способ определить, что на самом деле установлена Delphi 11.1, а не 11.0, чтобы можно было использовать исправление, а не обходной путь? Определения компилятора для RTLVersion
и CompilerVersion
не изменились и по-прежнему остаются 35.0
. Определение статического компилятора также остается VER350
.
Существует константа RTLVersion111
, которую вы можете использовать, чтобы определить, имеете ли вы дело с 11.1.
const
RTLVersion111 = True;
{$IF RTLVersion111}
Writeln('DEFINED RTL 11.1');
{$ELSE}
Writeln('NOT DEFINED RTL 11.1');
{$IFEND}
Разве вы не должны использовать {$IF DECLARED(RTLVersion111)})
вместо этого? Кроме того, старые константы, такие как RTLVersion1041
и RTLVersion1041
, все еще объявляются?
@RemyLebeau Это логическая константа, поэтому ее можно использовать как есть. Так удобнее читать. Старые константы не определены. Для различения основных версий можно использовать RTLVersion
, а затем комбинировать условную компиляцию с RTLVersion111
или другими константами в зависимости от конкретных требований кода.
<del>Значит, константа RTLVersion111
объявляется даже в версиях, предшествующих Delphi 11.1, со значением False
?</del> А, вы полагаетесь на это свойство: «Если идентификаторы, указанные в условном выражении, не существуют, условное выражение будет оцениваться как False».
@AndreasRejbrand нет, RTLVersion111
появился в версии 11.1 (отсюда и 111 в его названии).
"Определения компилятора для RTLVersion и CompilerVersion не изменились и по-прежнему имеют значение 35.0." - если были изменения в RTL,
RTLVersion
должно было увеличиваться. Если бы это было не так, Embarcadero пришлось бы это исправлять. Но, если изменения только в VCL, то нет константыVCLVersion
, которую можно было бы проверить.