Variablen byteweise in Buffer schreiben

Kangaxx

Mitglied
Hallo zusammen,

hätte mal ne Frage zu nem aktuellen Projekt von mir. Ich schreibe ne Komponente die das OSCAR Protokoll das z.B von ICQ verwendet wird implementiert.
Die dabei verwendeten Datenpakete werden byteweise zusammengesetzt und dann verschickt.

Jetzt ist meine Frage, wie kann ich in Delphi Variablen (z.B Strings, Integers, Dates) in einen Buffer (array of Byte) schreiben?

hatte es bis jetzt so versucht:
Code:
type BytePacket = array of BYTE;

function VarToBytePacket(Val : Variant ) : BytePacket;
var ret : TMemoryStream;
begin
    ret := TMemoryStream.Create();
     
       if VarType(Val) and varTypeMask = varDouble  then ret.Write(Val,Sizeof(Double));
else   if VarType(Val) and varTypeMask = varInteger then ret.Write(Val,Sizeof(Integer));

//usw. für alle benötigten Typen.

   SetLength(Result,ret.Size);
   Move(ret.Memory,Result,ret.Size);
   ret.Free;
end;

Das Problem ist nur, ich bekomme keine Compiler Fehler, aber nach dem ret.Free bekomme ich einen EAccessViolation Error.

Kann mir jemand sagen warum, bzw wie ich es anders machen könnte?

mfg,
Kangaxx
 
Zuletzt bearbeitet:
Der Fehler resultiert daraus, daß Du versuchst auf einen Speicherbereich zuzugreifen der nicht existent ist.

Versuchs doch mal mit der Funktion TMemoryStream.read() Als Buffervariable benutzt Du dann Result. Ich bin mir allerdings nicht sicher ob dynamische Arrays als Funktiosergebnis funktionieren. Es ist vielleicht besser, wenn Du ein globales Array in Deinem Programm deklarierst.

Probier auch mal was passiert wenn Du die Move - Zeile auskommentierst. Wenn dann kein Fehler kommt, wir wohl hier was schief laufen.

Gruß Twinsetter
 
Zurück