1

我们有一些类似这样的代码(Delphi 6 RTL Update Pack 3):

objChild1 := TChild1.create();
... (Some Code)
objProcessor.function1(objChild1);

Tchild1 通过 2 + 层级从 TGrandPa 继承。

function1 是这样定义的,其中 objChildData 是 TProcessor 类的私有变量,并且是 TChild1 类型:

TProcessor.function1(objTemp : TGrandPa):boolean;    
begin
    objChildData := TChild1(objTemp);
    ....
end;

从日志中(因为我们无法在客户机器上调试),我们缩小了 function1 中的第一行使 objChildData有时且仅在一个特定客户的机器上为零的范围。部署相同代码的其他地方似乎工作得很好。

谁能解释一下为什么会发生这种情况和/或如何解决这个问题?

4

2 回答 2

2

似乎您在 ObjChild.Create 上做某事引发异常并且由于某种原因被吞下(try..except 其中 except 子句为空) - 当发生这种情况时,Create 无法返回有效实例,NIL而是返回。它可以是在构造函数内部调用的函数。

如果您将您在 TObjChild.Create 上所做的事情带到该站点,也许我们可以发现问题。

于 2010-09-03T17:46:44.100 回答
1

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

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

于 2010-09-03T21:36:26.617 回答