Могу ли я установить {$RangeChecks on} для устройства, которое не имеет интерфейса?

У меня есть проект Delphi, который содержит много форм и модулей (без интерфейса), формы, где я помещаю " {$RangeChecks on} " ловит исключение вне диапазона, но когда я добавляю его в модуль, который содержит классы, он не поймать исключение, поможет ли выловить исключения из индекса в этом модуле?

1 ответ

Решение

Чтобы поймать исключение, вам нужно написать try-except блок:

try
  // call code that fails range checks
except
  on E: ERangeError do
    // ...
end;

Чтобы код генерировал эти исключения, необходимо сделать две вещи:

  1. Убедитесь, что проверка диапазона включена. Один из способов сделать это с помощью $RANGECHECKS (ака $R) директива компилятора. Вы можете поместить его в любом месте блока, например, вверху или непосредственно перед строками кода, которые вы хотите проверить. Он применяется ко всему коду, который следует за ним в текущем модуле, пока компилятор не встретит другую директиву, которая отключает его, например {$R-},

    Если ваш план состоит в том, чтобы поместить его в верхнюю часть каждого модуля, то вы можете сделать то, что я сделал, и включить его глобально, отредактировав параметры компилятора проекта. (Пока вы там, я рекомендую включить проверку переполнения и "оператор typed @").

  2. Выполнить код, который нарушает диапазон типа или массива. Присвойте большие целочисленные значения меньшим типам или отрицательные значения неподписанным типам. Чтение из-за конца динамического массива или массива фиксированного размера, длина которого известна во время компиляции.

Это не имеет ничего общего с назначением модуля или видом кода, который содержит модуль. Опция проверки диапазона применяется в равной степени к любому виду единиц, включая единицы, которые определяют формы, единицы, которые определяют модули данных, и единицы, которые вообще не определяют объекты времени разработки. Если вы считаете, что тип кода в ваших единицах влияет на поведение опции проверки диапазона, то у вас есть другие проблемы, требующие расследования

Другие вопросы по тегам