Предупреждение TStream в Delphi - PullRequest
3 голосов
/ 01 декабря 2011

У меня есть следующий фрагмент кода

 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;   

У меня проблема с пониманием инициализации переменной bs.

Если я не инициализирую ее, я получаю очевидное предупреждение.

 Variable 'bs' might not have been initialized.

Теперь, если я сделаю это как закомментированную часть, то есть

 bs:= TStream.create;

, я получу следующее предупреждение.

Constructing instance of 'TStream' containing abstract method 'TStream.Read'
Constructing instance of 'TStream' containing abstract method 'TStream.Write'

и, наконец, все будет работать нормально,Я использую

 bs:=nil;

Правильно ли я делаю это, назначив Nil?

Любые мнения приветствуются.

1 Ответ

10 голосов
/ 01 декабря 2011

TStream является абстрактным, поэтому его не следует создавать (вызов абстрактного метода вызывает ошибку во время выполнения). Вместо этого вам следует создать экземпляр неабстрактного потомка. Когда вы закончите, вы должны Free экземпляр.

Например:

var
  Stream: TStream;
begin
  try
    Stream := CreateBlobStream(FieldByName('Picture'), bmRead);
    try
      // ...
    finally
      Stream.Free;
    end;
  except 
    // handle exceptions
  end;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...