Vielen Dank allen.
Ich war der Meinung, Emba hätte das mal einheitlich umgesetzt und eine generische Compilermagie eingebaut.
Na ja...
Ich habe mir jetzt eine kleine
Unit gebaut, die den MemoryStream um zwei Funktionen erweitert.
Dazu einfach in allen Units, die die Streamfunktionalität brauchen, die
Unit nach der SystemClasses einbinden:
(Ich vergesse immer wieder, die diese Klassen-Ersetzung heißt.
)
Lieber Wäre mir zwar, WriteData<String>() und ReadData<String>() zu erweitern (um einfach immer diese Methoden nutzen zu können) aber habe keine Ahnung, ob das umsetzbar und dann auch stabil wäre...
Mit dem Workaround hier kann ich aber schon ganz gut leben.
Delphi-Quellcode:
unit MyUnit;
interface
uses
System.Classes, MyMemoryStream,
// <----------------
Generics.Collections, System.SyncObjs,
Winapi.MMSystem;
type
Delphi-Quellcode:
unit MyMemoryStream;
interface
uses
System.Classes;
type
TMemoryStream =
class(System.Classes.TMemoryStream)
public
procedure ReadString(
var aString:
String);
procedure WriteString(
const aString:
String);
end;
implementation
{: ************************************* TMemoryStream ************************************ :}
{: ---------------------------------------- public ---------------------------------------- :}
procedure TMemoryStream.ReadString(
var aString:
String);
var
Reader: TBinaryReader;
begin
Reader := TBinaryReader.Create(Self);
try
aString := Reader.ReadString;
finally
Reader.Free;
end;
end;
procedure TMemoryStream.WriteString(
const aString:
String);
var
Writer: TBinaryWriter;
begin
Writer := TBinaryWriter.Create(Self);
try
Writer.
Write(aString);
finally
Writer.Free;
end;
end;
end.