Unsafe cast в delphi понякога дава нула само на определени машини?

Имаме код нещо подобно (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 нула понякога и само на една конкретна клиентска машина. Останалите места, където е внедрен същия код, изглежда работят перфектно.

Може ли някой да хвърли малко светлина върху това защо се случва това и/или как да го разрешим?


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


Отговори (2)


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

Ако пренесете това, което правите в TObjChild.Create, на сайта, може би можем да забележим проблема.

person Fabricio Araujo    schedule 03.09.2010

Можете да дебъгвате кода, изпълняван на клиентска машина, като използвате Remote Debugger (налично от Delphi 3 или 4).

Както и да е, от регистрационните файлове как сте сигурни, че параметърът objTemp не е нула?

person jachguate    schedule 03.09.2010