Gre*_*hop 6 delphi string tstream
我正在尝试将字符串转换为TStream.我的下面的代码在CopyFrom行上给我一个"抽象错误"消息.我在这里碰壁砖,有关如何解决这个问题的想法吗?
procedure StringToStream(const AString: string; out AStream: TStream);
var
SS: TStringStream;
begin
SS := TStringStream.Create(AString);
try
SS.Position := 0;
AStream.CopyFrom(SS, SS.Size); //This is where the "Abstract Error" gets thrown
finally
SS.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
AStream被声明为OUT参数,这意味着它不会在过程开始时分配,并且过程负责为其分配适当的值.
如果我解释你的代码是正确的,你应该省略OUT并确保在调用例程时正确实例化AStream.
显示StringToStream调用的更多代码可能会提供更多线索.
以下程序应该完全符合您的要求.请注意,您对AStream的使用负责释放在此过程中创建的实例.返回父类(在本例中为tStream)而不是特定的后代是完全正常的.
procedure StringToStream(const AString: string; out AStream: TStream);
begin
AStream := TStringStream.Create(AString);
end;
Run Code Online (Sandbox Code Playgroud)
您还可以将其编码为函数:
Function StringToStream(const AString: string): TStream;
begin
Result := TStringStream.Create(AString);
end;
Run Code Online (Sandbox Code Playgroud)
CopyFrom调用ReadBuffer,它调用Read,Read被声明为abstract.你传递给AStream的是什么样的流?如果它没有实现Read,那么你会得到一个抽象错误.(当你实例化它时,编译器会给你一个警告.)