tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
2727
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Kangaxx
    Kangaxx Kangaxx ist offline Mitglied Silber
    Registriert seit
    Mar 2005
    Ort
    Vaihingen an der Enz
    Beiträge
    88
    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 delphi:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    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
    Geändert von Kangaxx (05.07.07 um 18:05 Uhr)
     
    Ahh, the Internet! Where men are men, women are men and little girls are FBI agents.

  2. #2
    Twinsetter Twinsetter ist offline Mitglied Silber
    Registriert seit
    Mar 2007
    Beiträge
    95
    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
     

Ähnliche Themen

  1. Variablen in Text schreiben...
    Von GanjalDanjal im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 12.02.09, 07:01
  2. Mit C# Buffer in struktur schreiben
    Von xbu58 im Forum C/C++
    Antworten: 0
    Letzter Beitrag: 01.06.08, 11:52
  3. Daten aus Variablen schreiben?
    Von Neori im Forum PHP
    Antworten: 4
    Letzter Beitrag: 09.11.06, 19:48
  4. Antworten: 2
    Letzter Beitrag: 22.03.04, 22:42
  5. Antworten: 6
    Letzter Beitrag: 19.02.04, 10:07