Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 我可以为没有接口的单元设置{$RangeChecks on}吗?_Delphi_Delphi 7_Range Checking - Fatal编程技术网

Delphi 我可以为没有接口的单元设置{$RangeChecks on}吗?

Delphi 我可以为没有接口的单元设置{$RangeChecks on}吗?,delphi,delphi-7,range-checking,Delphi,Delphi 7,Range Checking,我有一个delphi项目,它包含很多表单和单元(没有接口),我放置“{$RangeChecks on}”的表单捕获超出范围的异常,但当我将其添加到conatins类的单元时,它不会捕获异常,是否有助于捕获该单元中的索引异常?捕获异常,您需要编写一个try-,除了块: try // call code that fails range checks except on E: ERangeError do // ... end; 为了确保代码抛出这些异常,您需要做两件事: 确保已启

我有一个delphi项目,它包含很多表单和单元(没有接口),我放置“{$RangeChecks on}”的表单捕获超出范围的异常,但当我将其添加到conatins类的单元时,它不会捕获异常,是否有助于捕获该单元中的索引异常?

捕获异常,您需要编写一个
try
-
,除了
块:

try
  // call code that fails range checks
except
  on E: ERangeError do
    // ...
end;
为了确保代码抛出这些异常,您需要做两件事:

  • 确保已启用范围检查。一种方法是使用
    $RANGECHECKS
    (又称
    $R
    )编译器指令。您可以将它放在单元中的任何位置,例如顶部,或者放在要检查的任何代码行之前。它应用于当前单元中跟随它的所有代码,直到编译器遇到另一个关闭它的指令,如
    {$R-}

    如果您的计划是将它放在每个单元的顶部,那么您可以像我所做的那样,通过编辑项目的编译器选项来全局启用它。(在这里,我建议启用溢出检查和“typed@operator”。)

  • 执行违反类型或数组范围的代码。将大整数值指定给较小的类型,或将负值指定给无符号类型。从编译时已知长度的动态数组或固定大小数组的末尾以外读取


  • 这与单元的用途或单元包含的代码类型无关。范围检查选项同样适用于任何类型的单元,包括定义表单的单元、定义数据模块的单元以及根本不定义任何设计时对象的单元。如果您认为单位中的代码类型影响范围检查选项的行为,那么您还有其他问题需要调查

    $RANGECHECKS
    有效。请显示代码。但如果不包括SysUtils,则可能不会捕获异常。没有接口的单元是什么?它们都必须有一个接口和一个实现部分。FWIW,表单也是类。您的意思是具有非表单类的单元在接口部分中没有uses子句吗?是否SysUtils丢失了?我认为“无接口”意味着“无GUI”,因为它也表示“包含类的单元”。