この方法で、既存のプログラム (c++ 自動生成コード) にバグが見つかりました。
void _CallStyle _WFObjectVarAsStringExtractEFAgent::LoadValue(Pointer __VarAddress, aType theVarType) {
absolute(tpPointer, VarAddress, __VarAddress);
aLightObject Obj = nil;
Obj = aLightObject(*VarAddress);
if ( Obj == Nil ) {
this->SetValue("");
} else {
this->SetValue(Obj->StringExtract(this->ExtractKind, this->ExtractParam, 0));
}
this->Lock();
if ( Obj == Nil ) {
this->Disable();
} else {
this->Enable();
}
}
行Obj = aLightObject(*VarAddress);
が有効なaLightObject
インスタンスも返さない場合もありますNil
(ただし、破損したaLightObject
インスタンスが返されます)。
したがって、次の行でブロックif ( Obj == Nil ) {
を入力すると、呼び出しを実行しようとするとプログラムが失敗します。else
Obj->StringExtract
Obj
インスタンスが有効かどうかをテストするにはどうすればよいですか?