Небезопасное приведение в delphi иногда дает ноль только на определенных машинах?

У нас есть примерно такой код (Delphi 6 RTL Update Pack 3):

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

Tchild1 наследуется от TGandPa через 2+ уровня иерархии.

function1 определяется следующим образом, где objChildData — частная переменная класса TProcessor и имеет тип TChild1:

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

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

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


person psk    schedule 08.02.2010    source источник
comment
Вероятно, когда TChild1(objTemp) равен нулю, тогда objTemp равен нулю. Попробуйте также войти objTemp.ClassName   -  person ulrichb    schedule 12.02.2010
comment
Проблема не в безопасном или небезопасном приведении, а в неверном предположении, что Create всегда будет возвращать объект. На самом деле, когда Create терпит неудачу, он возвращает nil. Вы должны отладить свой конструктор TChild1.Create.   -  person PA.    schedule 15.02.2010


Ответы (2)


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

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

person Fabricio Araujo    schedule 03.09.2010

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

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

person jachguate    schedule 03.09.2010