Estoy intentando convertir una cadena en una TStream. Mi código a continuación me da un mensaje de "Error abstracto" en la línea CopyFrom. Estoy contra una pared de ladrillos aquí, ¿alguna idea sobre cómo resolver esto?String to TStream
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;
Bueno, claramente AStream * está * asignado si obtiene un error abstracto cuando llama a un método en él Probablemente esté instanciado como un TStream en lugar de una clase descendiente. –
Tiene razón. Y como la declaración real del valor otorgado para AStream debe ser exactamente TStream (de lo contrario, el compilador se quejaría), existe una alta probabilidad de que en realidad es una instancia de TStream abstracta en lugar de una clase heredada. Pero además de eso, todavía no es una buena decisión convertirlo en un parámetro de salida. –
Gracias a todos los que ofrecieron ayuda. Lo llamaba con solo un TStream, de lo que ahora me doy cuenta no tiene mucho sentido. Cambié a llamar al procedimiento con un TMemoryStream y alteré el procedimiento a (rem confirmando la salida): procedimiento StringToStream (const AString: string; AStream: TMemoryStream); var SS: TStringStream; begin SS: = TStringStream.Create (AString); try SS.Position: = 0; AStream.CopyFrom (SS, SS.Size); finalmente SS.Free; final; final; Esto parece haber resuelto el problema. De nuevo, muchas gracias! –