![]() |
Streamproblem
Hallo,
wie kann ich bei folgendem Code das Record mit den Daten aus dem Stream füllen?
Delphi-Quellcode:
Gruß
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type TTest = record a, b, c: integer; end; var Form1: TForm1; Stream: TMemoryStream; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Test: TTest; begin Test.a := 1; Test.b := 2; Test.c := 3; Stream := TMemoryStream.Create; Stream.WriteBuffer(Test, Sizeof(Test)); end; procedure TForm1.Button2Click(Sender: TObject); var test2: TTest; begin Stream.Position := 0; Stream.SaveToFile('c:/hm.txt'); end; end. Spurius |
Re: Streamproblem
Hallo,
ganz eínfach:
Delphi-Quellcode:
Ich habe Deinen Code noch ein bißchen geändert.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TTest = record a, b, c: integer; end; TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } FStream: TMemoryStream; public { Public-Deklarationen } end; var Form1: TForm1; // Stream: TMemoryStream; // globale Instanzen / Variablen sind immer schlecht implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); // OnCreate Event-Handler begin FStream:=TMemoryStream.Create; end; procedure TForm1.FormDestroy(Sender: TObject); // OnDestroy Event-Handler begin FStream.Free end; procedure TForm1.Button1Click(Sender: TObject); var Test: TTest; begin Test.a := 1; Test.b := 2; Test.c := 3; {Stream := TMemoryStream.Create; Stream.WriteBuffer(Test, Sizeof(Test)); } FStream.Write(Test,SizeOf(TTest); end; procedure TForm1.Button2Click(Sender: TObject); var test2: TTest; begin FStream.Position := 0; FStream.SaveToFile('c:/hm.txt'); end; procedure TForm1.Button3Click(Sender: TObject); // Öffnet eine Datei und schiebt den Inhalt in FStream var Test3 : TTest; begin FStream.LoadfromFile('c:/hm.txt'); FStream.Position := 0; // sicherheitshalber FStream.Read(Test3,SizeOf(TTest)); end; end. |
Re: Streamproblem
Gibt es einen Grund, warum du einen MemoryStream genommen hast und keinen FileStream?
BTW solltest du das Objekt auch irgendwo wieder freigeben. ;) |
Re: Streamproblem
Hallo,
Danke. Gruß Spurius |
Re: Streamproblem
So,
ich wollte das ganze jetzt mit Indy/ TCP versenden, aber es geht irgendwie nicht:
Delphi-Quellcode:
Was mach ich da falsch?
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdTCPConnection, IdTCPClient, IdBaseComponent, IdComponent, IdTCPServer; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Memo1: TMemo; Server: TIdTCPServer; Client: TIdTCPClient; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure ServerExecute(AThread: TIdPeerThread); procedure ServerConnect(AThread: TIdPeerThread); procedure FormDestroy(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type TTest = record a, b, c: integer; end; var Form1: TForm1; Stream, stream2: TMemoryStream; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Test: TTest; begin client.Connect; Test.a := 1; Test.b := 2; Test.c := 3; Stream := TMemoryStream.Create; Stream.Write(Test, Sizeof(Test)); Client.WriteStream(stream, true, true, 0); end; procedure TForm1.ServerExecute(AThread: TIdPeerThread); begin Label1.Caption := 'Connected'; end; procedure TForm1.ServerConnect(AThread: TIdPeerThread); var test2: TTest; begin Stream2 := TMemoryStream.Create; athread.Connection.ReadStream(stream2); Stream2.Position := 0; Stream.Read(Test2, Sizeof(TTest)); memo1.Lines.Add(inttostr(test2.a)); // wenn a oder b dann kommt eine große zahl, wenn c kommt 0 end; procedure TForm1.FormDestroy(Sender: TObject); begin Stream.Free; stream2.Free; end; end. Gruß Spurius |
Re: Streamproblem
Geht leider immer noch nicht...
|
Re: Streamproblem
Tja. Bei solchen detailierten Beschreibungen der Fehlermeldung, bzw. was nicht geht, ist man so von Informationen erschlagen, dass man gar nicht weiß, wo man als erstes ansetzten soll. :?
|
Re: Streamproblem
Also. der Stream den ich versenden will wird nicht richtig im Memo angezeigt.
Wenn ich aus dem Record, welches ich mit dem Stream fülle, test.a auslese kommt 9261416, bei test.b kommt 9258196, bei test.c kommt 0. Wenn die Infos nicht ausreichen, kann ich dir das Projekt auch mal schicken. Gruß Spurius |
Re: Streamproblem
Gibts wirlich niemand hier, der mir helfen kann?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz