2010-02-08 3 views
1

Nous avons un code quelque chose comme ça (Delphi 6 RTL Update Pack 3):La fonte dangereuse dans delphi donne parfois un néant seulement sur certaines machines?

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

Tchild1 est héritée de TGrandPa par 2 + niveaux de la hiérarchie.

function1 est défini comme celui-ci où objChildData est une variable privée de classe TProcessor et est de type TChild1:

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

A partir des journaux (puisque nous ne pouvons pas déboguer sur une machine client), nous avons réduit bas que la première ligne de la fonction1 rend objChildData parfois et seulement sur les machines d'un client particulier. Reste des endroits où le même code est déployé semble fonctionner parfaitement bien.

Quelqu'un peut-il expliquer pourquoi cela se produit et/ou comment résoudre ce problème?

+0

Probablement lorsque TChild1 (objTemp) est nul, alors objTemp est nul. Essayez de consigner 'objTemp.ClassName' trop – ulrichb

+0

Le problème n'est pas lié à la conversion sécurisée ou non sûre, mais à l'hypothèse incorrecte que Create retournera toujours un objet. En fait, lorsque Create échoue, il renvoie zéro. Vous devez déboguer votre constructeur 'TChild1.Create'. –

Répondre

2

Apparemment, vous faites quelque chose sur ObjChild.Create qui lève une exception et qui est avalée (try..except où la clause except est vide) pour une raison quelconque - lorsque cela se produit, Create ne peut pas renvoyer une instance valide, retournant NIL à la place. Cela peut être une fonction appelée à l'intérieur du constructeur.

Si vous apportez ce que vous faites sur le TObjChild.Create sur le site, peut-être que nous pouvons repérer le problème.

1

Vous pouvez déboguer le code s'exécutant sur une machine client à l'aide de Remote Debugger (disponible depuis Delphi 3 ou 4).

Quoi qu'il en soit, par les logs comment êtes-vous sûr que le paramètre objTemp n'est pas nul?

Questions connexes