Zitat von
-Lucky-:
Delphi-Quellcode:
function MemoryToString(ms: TMemoryStream): AnsiString;// inline;
//...
ms := TMemoryStream.Create;
try
Len := ms.Size;
SetLength(Result, Len);
if Len > 0 then
ms.ReadBuffer(Result[1], Len);
finally
ms.Free;
end;
end;
Hi Lucky,
sag mal was liefert wohl ms.Size nach der Zeile TMemoryStream.Create?! Wenn der Wert mal > 0 ist, dann würde ich mir echt Sorgen machen!
Wenn Du dann einen Stream übergibst (und den nicht gerade vorher erzeugst), dann musst Du auch tunlichst darauf achten, dass die Position auf 0 zurückgesetzt wird. Hast Du also gerade ein Datum in den Stream eingelesen, dann steht der Positions-Zeiger des Streams eben auch am Ende (um anzuhängen). Versuch mal folgenden Code:
Delphi-Quellcode:
function memoryToString(const ms: TMemoryStream): String;
var Length: Integer;
begin
length := Integer(ms.Size);
setLength(result,
length);
ms.Position := 0;
ms.Read(Result[1],
length);
ShowMessage(result);
end;
Die Rückwärtsfunktion sollte dann einfach sein, so was in der Art:
Delphi-Quellcode:
function StringToMemory(const s: String): TMemoryStream;
begin
result := TMemoryStream.Create;
if length(s) > 0 then
begin
result.write(s[1],
length(s));
end;
end;
Gruß,
Der Unwissende
[add]
Nix roter Kasten, deshalb das gleiche gesagt wie SirThornberry
[/add]