Delphi: Условная компиляция по номеру версии.

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Коллеги, никто не подскажет следующий момент?
Помню, что в Turbo/Borland Pascal существовали предопределенные Define-ы, показывающие номер версии компилятора. Если не ошибаюсь, они назывались Ver50, Ver55, Ver60, Ver70.
Т.е. можно было писать version-зависимый код. Например, насколько я помню, при переходе от версии 5.5 к 6.0 изменился менеджер хипа, и некоторые системные переменные пропали. Поэтому в библиотеке типа Object Profeccional можно было видеть строки типа:

Код: Выделить всё

{$IfDef Ver55}
 <тут использовалась припавшая в 6.0 переменная>
{$EndIf}
Вопрос. А есть ли что-нибудь подобное в Delphi? Лазил по встроенному хелпу, но ничего не нашел на этот счет.
Т.е. хотелось бы написать, например, что-то вроде:

Код: Выделить всё

{$IfDef Delphi50}
 ..............
{$EndIf}
{$IfDef Delphi60}
 ..............
{$EndIf}
Заранее спасибо.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

По прежнему VERxxx
Кроме того VCLxx - версия VCL
Надо пощерстить исходники VCL и стандартных функций. Наверняка там где-то стоит DEFINE.

Нашел:

один интересный файл. Прикольно они в своем прилоежении анализируют версию :) Прям аж начиная из каменного века.

http://trac.miranda.im/mainrepo/browser ... c?rev=1221
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Naeel Maqsudov писал(а):По прежнему VERxxx
А вот нифига не работает это.
У меня сейчас стоил Delphi 5.
Поглядел на один интересный файл, пишу в коде строки:

Код: Выделить всё

  {$IfDef DELPHI5}
    sdfsdfsdsdfs_line1;
  {$Else}
    sdddddddsdfs_line2;
  {$Endif}
Получаю синтаксическую ошибку на sdddddddsdfs_line2.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Внимательнее! В упомянутом файле написано

Код: Выделить всё

{$IFDEF VER130} 
   {$DEFINE COMPILER5} 
   {$DEFINE VCL50} 
   {$IFDEF BCB} 
     {$DEFINE BCB5} 
   {$ELSE} 
     {$DEFINE DELPHI5} 
   {$ENDIF} 
{$ENDIF} 
Т.е. все завязано на VER130. И если есть VER130, то среда будет определена дибо как DELPHI5 либо BCB5

Вот этот кусочек вставьте перед своим.
Только после него можно написать "ifdef DELPHI5"
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Naeel Maqsudov писал(а):Т.е. все завязано на VER130. И если есть VER130, то среда будет определена дибо как DELPHI5 либо BCB5

Вот этот кусочек вставьте перед своим.
Только после него можно написать "ifdef DELPHI5"
Да, действительно. Не обратил я внимание, что все эти Delphi<N> - "рукотворные" дефайны, выставляемые в зависимости от VerXXX. А VerXXX, как я понимаю, продолжает считаться от версий Pascal-я. Ну и эти Delphi<N> (а также Compiler<N>) определяются для большей читабельности (чтобы не вспоминать, например, какой-такой версии Delphi соответствует Ver130 :) )

Не совсем понимаю (или не сталкивался с этим), каков смысл (что такое) BCB.

Спасибо большое. :)
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Borland CBuilder. Это IDE+тот же самый VCL, но вот язык C вместо Pascal.
Т.е. можно сделать программу, которая скомпилируется одинаково (или почти одинаково) и в Delphi и на CBuilder-е :)
Ответить