Полезные компоненты для пользователей Delphi и С++Builder
f65d50f6

Модуль Rx.inc.


В этом модуле содержится описание некоторых констант, обеспечивающих корректную обработку версий библиотеки и среды. Если версия библиотеки у нас не изменилась, то версия среды функционирования уже другая. Для обработки таких вещей Delphi вводит константу с именем VERXXX, где XXX - номер версии IDE. Для D5 константа версии - VER130. Эта константа немного нечитаема, поэтому в RxLib вводится ее своего рода дубликат RX_DX - где X - номер версии IDE. Сейчас в этом файле инициализируется константа RX_D4 (вообще говоря, должна инициализироваться, но так как номер версии компилятора сменился, то эта константа является неопределенной). По этой традиции мы добавляем константу RX_D5 сразу после {$IFDEF VER120} .. {$ENDIF}, учитывая, что номер версии компилятора VER130: {$IFDEF VER130} {Borland Delphi 5.0 } {$DEFINE RX_D3} {$DEFINE RX_D4} {$DEFINE RX_D5} {$ENDIF}

Номер версии компилятора может быть найден несколькими путями. Во-первых, порыться в справке. Во-вторых, методом проб и ошибок - делаем пустой проект, в нем пишем такой текст procedure Tform1.FormCreate(Sender: Tobject); var {$IFDEF VER130} a: Integer; {$ENDIF} begin a:=0; end;

и потом перебираем цифры в константе, пока не добьемся компиляции. Цифры могут быть только больше 120, так как 120 - уже относится к Delphi4. Вряд ли Inprise будет уменьшать эти цифры или увеличивать сразу намного. Если внимательно просмотреть файл Rx.inc, то можно увидеть аналогию: VER80 - Delphi1 VER90 - Delphi2 VER100 - Delphi3 VER110 - C++ Builder 3 VER120 - Delphi4

Ну, а Delphi5 может быть либо VER130, либо VER140 (если учесть появление C++ Builder 4). Поэтому вариантов для перебора не так уж и много.

На тот случай, если константа VER130 оказалась неопределенной (по каким-либо причинам), желательно исправить следующий далее по тексту вложенный IFDEF на такой {$IFNDEF VER80} { Delphi 1.0 } {$IFNDEF VER90} { Delphi 2.0 } {$IFNDEF VER93} { C++Builder 1.0 } {$DEFINE RX_D3} { Delphi 3.0 or higher } {$IFNDEF VER100} {$DEFINE RX_V110} { C++Builder 3.0 or higher } {$IFNDEF VER110} {$DEFINE RX_D4} { Delphi 4.0 or higher} // Добавлено {$IFNDEF VER120} {$DEFINE RX_D5} { Delphi 5.0 or higher} {$ENDIF} // конец добавления {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF}

Этот участок кода, если хорошенько вдуматься, обеспечивает определение константы RX_D5 в условиях компиляции в будущей версии IDE (скажем, в Delphi6). В этом случае библиотека должна уметь вести себя так же, как и в версии на номер ниже (пока что это смелое предположение в случае RxLib не срабатывало никогда - при переходах D1/D2, D2/D3, D3/D4, но в этом ее авторы не виноваты - всегда что-то менялось в VCL и в корне, - однако: это все же хорошая методика!)

Исправив данный модуль, архивируем библиотеку и пытаемся откомпилировать ее. Сразу натыкаемся на ошибку, гласящую о том, что оказывается неопределенной константа SdelphiKey. Ищем модуль где она расположена. Можно использовать любые средства поиска (от встроенных в Delphi, до внешних, или встроенных в OS). Нас интересует ее определение, поэтому необходимая строка поиска - <SdelphiKey = > и ищем все файлы, в которые эта строка входит. Таким образом находим модуль RxConst. Если бы эта константа не входила бы в RxLib, то можно было бы поискать ее в любом файле *.pas, *.inc (допустим в каталоге Source или вообще на всех локальных дисках). Однако в большинстве случаев с достаточной большой вероятностью можно предполагать какой областью диска можно ограничится для поиска. В том случае, если необходимый файл оказывается не найденным можно расширить область поиска или изменить строку поиска. Если и в этом случае нужное место не найдено, можно искать уже не только файлы *.pas, *.inc но и добавить к ним *.dcu, *.bpl, *.dpc или вообще *.*.



Содержание раздела