Ik heb nu een aantal functies op een van mijn classes waar ik verschillende typen kan wegschrijven naar een Stream.
Delphi Code:
procedure FileWriteString(AStream: TStream; const Value: string);
procedure FileWriteInteger(AStream: TStream; const Value: Integer);
procedure FileWriteBoolean(AStream: TStream; const Value: Boolean);
procedure FileWriteExtended(AStream: TStream; const Value: Extended);
procedure FileWriteSingle(AStream: TStream; const Value: Single);
procedure FileWriteColor(AStream: TStream; const Value: TColor);
procedure FileWriteString(AStream: TStream; const Value: string);
var
ASize : Integer;
AString : AnsiString;
begin
AString := AnsiString(Value);
ASize := Length(AString);
AStream.WriteBuffer(ASize, SizeOf(Integer));
if ASize > 0 then
AStream.WriteBuffer(AString[1], ASize);
end;
procedure FileWriteInteger(AStream: TStream; const Value: Integer);
begin
AStream.WriteBuffer(Value, SizeOf(Integer));
end;
procedureFileWriteBoolean(AStream: TStream; const Value: Boolean);
begin
AStream.WriteBuffer(Value, SizeOf(Boolean));
end;
procedure FileWriteExtended(AStream: TStream; const Value: Extended);
begin
AStream.WriteBuffer(Value, SizeOf(Extended));
end;
procedure FileWriteSingle(AStream: TStream; const Value: Single);
begin
AStream.WriteBuffer(Value, SizeOf(Single));
end;
procedure FileWriteColor(AStream: TStream; const Value: TColor);
begin
AStream.WriteBuffer(Value, SizeOf(TColor));
end;
Nu heb ik eigenlijk nog een heel tal aan typen die ik zou willen wegschrijven, en dacht dat dit wellicht beter/makkelijker kan dan voor elk type een writer procedure te maken. Ik weet dat bijvoorbeeld de Format functie een
gebruikt, waarin je dus elk type kan doorgeven. Zou dit ook mogelijk zijn met bovenstaande? Dat ik dus een procedure heb met als parameter const:
Delphi Code:
procedure FileWrite(AStream: TStream; const Value);
begin
AStream.WriteBuffer(Value, SizeOf(Value));
end;
Het enige waar ik hier tegen aanloop is dat bijvoorbeeld als ik hier een WideString in pass, deze niet goed wordt weggeschreven omdat ik dan dit zou moeten doen:
Delphi Code:
procedure FileWrite(AStream: TStream; const Value);
begin
AStream.WriteBuffer(Value, Length(String(Value)) * SizeOf(Value) );
end;
Omdat als ik een SizeOf doe op de value, ik de grootte van de WideChar krijg (in dit geval dus 4, bij een Integer ook 4, bij een Double bijvoorbeeld 8).
Is er een manier om er achter te komen welk type de value is? Zodat ik op basis daarvan de juiste lengte in bytes kan doorgeven?
Bookmarks