1

次のようなコードがあります (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;

ログから (顧客のマシンでデバッグできないため)、function1 の最初の行が objChildData を nil にすることがあり、特定の顧客のマシンでのみ発生することを絞り込みました。同じコードが展開されている残りの場所は、完全に正常に機能しているようです。

なぜこれが起こっているのか、および/またはこれを解決する方法について、誰かが光を当てることができますか?

4

2 に答える 2

2

何らかの理由で例外をスローし、飲み込まれた(except句が空の場合を除いて)ObjChild.Createで何かを実行しているようです。その場合、Createは有効なインスタンスを返すことができず、NIL代わりに戻ります。コンストラクター内で呼び出される関数にすることができます。

TObjChild.Createで行ったことをサイトに持ち込むと、問題を特定できる可能性があります。

于 2010-09-03T17:46:44.100 に答える
1

リモート デバッガ(Delphi 3 または 4 以降で利用可能)を使用して、顧客のマシンで実行されているコードをデバッグできます。

とにかく、ログによって、objTemp パラメータが nil ではないことをどのように確認できますか?

于 2010-09-03T21:36:26.617 に答える