Witam was mam taki oto fragment programu:
servicePort = interface(IInvokable)
['{40D5E173-70B7-E7E8-725D-FB4FAD6D69C3}']
Port : ServicePort;
Function TWebApi.LoginEnc(User,Password,Key : AnsiString): Boolean;
var
_DoQuerySysStatusRequest : DoQuerySysStatusRequest;
_DoQuerySysStatusResponse : doQuerySysStatusResponse;
begin
Result := False;
Password := EncodeString(GetStringHash(Password));
Try
_DoQuerySysStatusRequest := DoQuerySysStatusRequest.Create;
_DoQuerySysStatusRequest.sysvar := 1;
_DoQuerySysStatusRequest.countryId := 1;
_DoQuerySysStatusRequest.webapiKey := Key;
_doQuerySysStatusResponse := Port.doQuerySysStatus(_DoQuerySysStatusRequest);
Result := True;
Finally
_DoQuerySysStatusRequest.Free;
_doQuerySysStatusResponse.Free;
End;
end;
I teraz jak wystąpi jaki kolwiek błąd w
Port.doQuerySysStatus(_DoQuerySysStatusRequest);
to _doQuerySysStatusResponse.Free;
wywali błąd bo prubuje zwolnić coś czego nie ma. Jaki jest właściwy sposób rozwiązywania takich problemów?
Do głowy mi przychodzi najprostszy ale nieelegancki:
```delphi
Finally
_DoQuerySysStatusRequest.Free;
if Result Then _doQuerySysStatusResponse.Free;
End;
Drugi:
Finally
_DoQuerySysStatusRequest.Free;
if Assigned(_doQuerySysStatusResponse) Then _doQuerySysStatusResponse.Free;
End;
lub
Finally
_DoQuerySysStatusRequest.Free;
if _doQuerySysStatusResponse <> nil Then _doQuerySysStatusResponse.Free;
End;
Jak to powinno być fachowo i właściwie ?