Небезопасное приведение в Delphi иногда дает ноль только на определенных машинах? - PullRequest
1 голос
/ 08 февраля 2010

У нас есть код, похожий на этот (Delphi 6 RTL Update Pack 3):

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

Tchild1 наследуется от TGrandPa до 2 + уровней иерархии.

function1 определяется следующим образом: objChildData является закрытой переменной класса TProcessor и имеет тип TChild1:

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

Из журналов (так как мы не можем отлаживать на компьютере клиента), мы сузили, что первая строка в функции 1 делает objChildData nil иногда и только на машинах одного конкретного клиента. Остальные места, где развернут тот же код, похоже, работают отлично.

Может ли кто-нибудь пролить свет на то, почему это происходит и / или как решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 03 сентября 2010

Похоже, что вы делаете что-то в ObjChild.Create, которое выдает исключение и проглатывается (попробуйте ... за исключением случаев, когда предложение исключения пусто) по какой-то причине - когда это происходит, Create не может вернуть действительный экземпляр, возвращая NIL вместо. Это может быть функция, вызываемая внутри конструктора.

Если вы принесете то, что вы делаете на TObjChild. Создайте сайт, возможно, мы сможем определить проблему.

1 голос
/ 04 сентября 2010

Вы можете отлаживать код, запущенный на клиентском компьютере, с помощью Remote Debugger (доступно с Delphi 3 или 4).

Во всяком случае, по логам, как вы уверены, что параметр objTemp не ноль?

...