warning TStream in Delphi
-
26-10-2019 - |
Domanda
Ho il seguente frammento di codice
Procedure TFrm.Retrieve(mystring : string);
var
bs : TStream;
...
begin
...
bs:=nil;
//bs:= TStream.create;
try
bs := CreateBlobStream(FieldByName('Picture'), bmRead);
finally
bs.Free;
end;
...
end;
Ho un problema capire l'inizializzazione di variabili bs
.
Se io non inizializza, un evidente avvertimento ma ottengo.
Variable 'bs' might not have been initialized.
Ora, se lo faccio come la parte commentato vale a dire
bs:= TStream.create;
ottengo il seguente avviso.
Constructing instance of 'TStream' containing abstract method 'TStream.Read'
Constructing instance of 'TStream' containing abstract method 'TStream.Write'
e, infine, funziona tutto bene se io uso
bs:=nil;
sto facendo correggere assegnandolo ad Nil
?
Qualsiasi opinione apprezzato.
Soluzione
TStream
è astratta, quindi non dovreste un'istanza (chiamando un metodo astratto provoca un errore di runtime). Invece, si dovrebbe creare un'istanza di un discendente non astratta. Quando hai finito si dovrebbe Free
l'istanza.
Ad esempio:
var
Stream: TStream;
begin
try
Stream := CreateBlobStream(FieldByName('Picture'), bmRead);
try
// ...
finally
Stream.Free;
end;
except
// handle exceptions
end;
end;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow