Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Daten reinpacken in Tbytes... (https://www.delphipraxis.net/41862-daten-reinpacken-tbytes.html)

m0sch3r 9. Mär 2005 20:17


Daten reinpacken in Tbytes...
 
wie kann ich meine struktur
Delphi-Quellcode:

TUDPPacket   = record
                case ID : integer of
                $00 : (ClientReceive00  : TSearchFile);
                $11 : (ClientReceive11  : TSearchFile);
                ******************************************
 
TSearchFile  = record
                SFilename : string[100];
                SMD5       : string[50];
                SArtist   : string[50];
                STitle    : string[50];
                STyp      : string[4];
                SSize     : String[10];
                S_IP      : string[16];
                end;
in eine Struktur vom Typ Tbytes reinpacken...!?
Delphi-Quellcode:
TBytes = array of Byte;

Sprint 10. Mär 2005 09:05

Re: Daten reinpacken in Tbytes...
 
Mit SizeOf ermittelst du die Größe deiner Records. Mit SetLength setzt du die Größe deines Array's. Und mit Move kopierst du die Daten.

m0sch3r 10. Mär 2005 13:12

Re: Daten reinpacken in Tbytes...
 
Köntest du eventuell ein beispiel zeigen...!?

Sprint 11. Mär 2005 08:34

Re: Daten reinpacken in Tbytes...
 
Delphi-Quellcode:
type
  TMyRecord = packed record
  ...
  end;
Delphi-Quellcode:
type
  TBytes = array of Byte;
Delphi-Quellcode:
var
  MyRec: TMyRecord;
  MyArry: TBytes;
begin

  SetLength(MyArry, SizeOf(TMyRecord));
  Move(MyRec, MyArry[0], SizeOf(TMyRecord));

end;

m0sch3r 11. Mär 2005 14:40

Re: Daten reinpacken in Tbytes...
 
ich habe es auf die Weise gemacht...
Delphi-Quellcode:
procedure TForm1.UDPSendMyRecord(ip : string; SomeRecord: TUDPPacket);
var
    dummy : Tbytes;
begin
     setlength(dummy, sizeof(SomeRecord));
     move(SomeRecord, dummy[0], sizeof(someRecord));
     form1.IdUDPClient1.Host := ip;
     form1.IdUDPClient1.SendBuffer(dummy);
end;
Leider beim Empfang sind die Daten nicht mehr wieder erkennbar
sie werden folgendermaßen "Entpackt

Delphi-Quellcode:
var
    paketik   : TUDPPacket;
begin
          move(Adata, paketik, sizeof(adata));
          //Wenn man hier den wert von paketik untersucht dann erhält er nicht die gewünschten daten
Liegt es vieleicht an der Methode wie ich die Daten "entpacke"......!?

Luckie 11. Mär 2005 14:47

Re: Daten reinpacken in Tbytes...
 
Kann es sein, dass du den Zeiger verschickst? Die Adresse ist im Adressraum des anderen Prozesses natürlich nicht mehr gültig.

maximov 11. Mär 2005 15:00

Re: Daten reinpacken in Tbytes...
 
Auch für dieses problem würden sich serialisierbare objekte anbieten. Records sind version-anfällig und blöde in der handhabung. -> Hier im Forum suchendpCollection rules :)

m0sch3r 11. Mär 2005 15:30

Re: Daten reinpacken in Tbytes...
 
Besteht denn eine effiziente Möglichkeit, ein Record meines typs (sehe oben) per UDP zu verschicken (indy 10, Es ist im prinzip ein andreres Thema..:) )

maximov 11. Mär 2005 15:56

Re: Daten reinpacken in Tbytes...
 
Warum willst du das überhaupt in ein Array kopieren. Ist doch unnötig...

Delphi-Quellcode:
form1.IdUDPClient1.SendBuffer(SomeRecord, sizeOf(SomeRecord));
..oder so. und auf der anderen seite genauso wieder rein. Allerdings kenne ich das interface auch nicht.

:)

SirThornberry 11. Mär 2005 15:59

Re: Daten reinpacken in Tbytes...
 
den müsstest den String mit angabe der Länge + Inhalt des Strings verschicken. Das heißt du müsstest bevor du was verschicken kannst die teile des records erstmal in einen buffer kopieren und dann kannst du den buffer verschicken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:07 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz