Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.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中的不安全强制转换有时仅在某些机器上给出零?_Delphi_Casting_Delphi 6 - Fatal编程技术网

delphi中的不安全强制转换有时仅在某些机器上给出零?

delphi中的不安全强制转换有时仅在某些机器上给出零?,delphi,casting,delphi-6,Delphi,Casting,Delphi 6,我们有一些类似这样的代码(Delphi 6 RTL更新包3): Tchild1通过2+层次结构级别从TGrandPa继承 function1的定义如下,其中objChildData是TProcessor类的私有变量,类型为TChild1: TProcessor.function1(objTemp : TGrandPa):boolean; begin objChildData := TChild1(objTemp); .... end; 从日志中(因为我们无法在客户机器上

我们有一些类似这样的代码(Delphi 6 RTL更新包3):

Tchild1通过2+层次结构级别从TGrandPa继承

function1的定义如下,其中objChildData是TProcessor类的私有变量,类型为TChild1:

TProcessor.function1(objTemp : TGrandPa):boolean;    
begin
    objChildData := TChild1(objTemp);
    ....
end;
从日志中(因为我们无法在客户机器上调试),我们缩小了function1中的第一行有时并且仅在一个特定客户的机器上使objchildata为nil的范围。部署相同代码的其他地方似乎工作得很好


有人能解释一下为什么会发生这种情况和/或如何解决这种情况吗?

似乎您正在对ObjChild执行某些操作。Create抛出异常,但由于某种原因被吞没(try..except子句为空的情况除外)-发生这种情况时,Create无法返回有效实例,而是返回
NIL
。它可以是构造函数内部调用的函数


如果您将在TObjChild.Create上执行的操作带到站点,也许我们可以发现问题。

您可以使用远程调试器(从Delphi 3或4开始提供)调试客户计算机上运行的代码


无论如何,根据日志,您如何确定objTemp参数不是nil?

可能当TChild1(objTemp)为nil时,objTemp为nil。尝试记录
objTemp.ClassName
tooth问题不在于安全或不安全的强制转换,而在于错误地假设Create将始终返回一个对象。事实上,当Create失败时,它返回nil。您必须调试
TChild1。创建
构造函数。
TProcessor.function1(objTemp : TGrandPa):boolean;    
begin
    objChildData := TChild1(objTemp);
    ....
end;