Announcement

Collapse
No announcement yet.

TMemoryStream in TBytes konvertieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TMemoryStream in TBytes konvertieren

    Hallo,

    ich versuche verzweifelt eine TMemoryStream in einen TBytes Datentyp zu wandeln, um diesen dann über Indy10- TIdUDPClient zu versenden.

    Ich habe folgedes versucht:


    TBytes MyBytes;
    TStream *MyStream = new TMemoryStream();
    MyStream->Position = 0;
    MyStream->Write(&mystruct, sizeof(mystruct));
    MyStream->Position = 0;
    MyBytes.Length = sizeof(mystruct);
    MyStream->Read(&MyBytes, sizeof(mystruct
    )

    leider ohne Erfolg. Kann mir evtl. jemand einen Tip geben?

    LG, Stefan
    Zuletzt editiert von StSander; 19.11.2007, 23:41.

  • #2
    ich versuche verzweifelt eine TMemoryStream in einen TBytes Datentyp zu wandeln,
    ???

    Dein Quellcode zeigt doch eher, dass du über TStream etwas vom Typ TBytes lesen willst??

    leider ohne Erfolg.
    ...ist keine Fehlermeldung. Wo tritt wann was für ein Fehler auf!
    Christian

    Comment


    • #3
      Dein Quellcode zeigt doch eher, dass du über TStream etwas vom Typ TBytes lesen willst??
      Nein,
      MyStream->Read(&MyBytes, MyBytes.Length);
      bedeutet, dass Daten mit der Anzahl "lenght" aus dem Stream gelesen und in MyBytes abgelegt werden.

      Allerdings bekomme ich, wenn ich auf MyBytes zugreife, sofort eine Zugriffsverletzung, nachdem ich das Read ausgeführt habe, als ob dadurch MyBytes überladen wird.

      Ich hasse Indy 10 und möchte Indy 9 wiederhaben!

      Comment


      • #4
        MyStream->Read(&MyBytes, MyBytes.Length);
        bedeutet, dass Daten mit der Anzahl "lenght" aus dem Stream gelesen und in MyBytes abgelegt werden.
        joo, genau das, was ich sagte.....

        http://www.delphipraxis.net/post375317.html#375317


        http://forum.dsdt.info/viewtopic.php?t=30796

        http://www.experts-exchange.com/Prog..._22126761.html
        Christian

        Comment


        • #5
          Diese Beispiele hatte ich auch schon gefunden. Leider kann ich mit dem Delphi-Code nicht so richtig was anfangen, da es SetLength beim CBuilder garnicht zu geben scheint.

          Bei dem letzen Link sind die Beipiele wohl nur sichtbar, wenn man dort registriert ist.

          Trotzdem vielen Dank!

          Comment


          • #6
            nunja, den Delphicode kann man schon umsetzen.Wenn es dir nur darum geht, Rechner im Netzwerk zu finden, hilft vielleicht das

            http://www.marquardtnet.info/cecke/k...urce_info.html
            Christian

            Comment


            • #7
              Originally posted by Christian Marquardt View Post
              nunja, den Delphicode kann man schon umsetzen.Wenn es dir nur darum geht, Rechner im Netzwerk zu finden, hilft vielleicht das

              http://www.marquardtnet.info/cecke/k...urce_info.html
              Ich möchte mit Indy UDP eine den Inhalt einer Stuktur von einem Rechner zu einen anderen Rechner senden. Dazu benötioge ich bei dem CBuilder2007 den TBytes Datentyp. Ich kann eine Struktur problemlos in einen Stream schreiben. Jetzt muss ich den Stream nur noch in den TBytes Datentyp wandeln.

              Ich habe dazu den folgeden Delphi-Code gefunden

              procedure TForm1.Button3Click(Sender: TObject);
              var
              ByteDynArray:TByteDynarray;
              MemStream:TMemoryStream;
              begin
              if edit1.text<>'' then
              begin
              MemStream:=TmemoryStream.create;
              try
              MemStream.loadfromfile(edit1.text);
              setlength(bytedynarray,memstream.size);
              memstream.position:=0;
              memstream.read(bytedynarray[0],memstream.size);
              GetIFileTransfer.UploadFiletoServer('Test12354.pdf ',Bytedynarray);
              finally
              Memstream.free;
              end;
              end;
              end;


              Der C++ Compiler kennt nun einerseits den Befehl "SetLength" nicht und kommt andererseits nicht mit "MemStream->Read(bytedynarray[0],MemStream.Size);" nicht zurecht.

              Comment


              • #8
                ein Array von Bytes würde ich mit einem Zeiger auf SYSMEM-> C++Builder oder GlobalAlloc -> Win 32 API realisieren. Damit einen Speicherbereich reservieren in der Größe von memstream.size.

                Der zurückgelieferte Zeiger zeigt auf das 1. Byte.
                Christian

                Comment


                • #9
                  Endlich geackt!

                  Jetzt klappts!!
                  Die Lösung ist tatsächlich wie im Delphi-Beispiel:

                  MyStream->Read(&MyBytes[0], sizeof(mystruct)

                  Comment

                  Working...
                  X