我有一个包含很多表单和单元(没有接口)的delphi项目,我放置“{$RangeChecks on}”的表单捕获了超出范围的异常,但是当我将它添加到包含类的单元时它没有捕获异常,是否有助于捕获该单元中的索引异常?
问问题
170 次
1 回答
2
要捕获异常,您需要编写一个try
-except
块:
try
// call code that fails range checks
except
on E: ERangeError do
// ...
end;
为了确保代码抛出这些异常,您需要做两件事:
确保启用范围检查。一种方法是使用
$RANGECHECKS
(aka$R
) 编译器指令。您可以将它放在一个单元中的任何位置,例如顶部,或紧接在您要检查的任何代码行之前。它适用于当前单元中跟随它的所有代码,直到编译器遇到另一个将其关闭的指令,例如{$R-}
.如果您的计划是将它放在每个单元的顶部,那么您可以做我所做的并通过编辑项目的编译器选项来全局启用它。(当你在那里时,我建议启用溢出检查和“键入@运算符”。)
执行违反类型或数组范围的代码。将大整数值分配给较小的类型,或将负值分配给无符号类型。从动态数组或在编译时已知长度的固定大小数组的末尾读取。
这与单元的用途或单元包含的代码类型无关。范围检查选项同样适用于任何类型的单元,包括定义表单的单元、定义数据模块的单元以及根本不定义任何设计时对象的单元。如果您认为您的单元中的代码类型正在影响范围检查选项的行为,那么您还有其他需要调查的问题
于 2012-09-13T13:56:25.903 回答