![]() |
Re: Records dynamisch verschachteln
Zitat:
(Wenn man in seine Records string durch string[xx] ersetzt, wird's compiliert) Gruß Gammatester |
Re: Records dynamisch verschachteln
Ich versteh aber nicht warum das nicht geht.
Zitat:
*edit* Zitat:
|
Re: Records dynamisch verschachteln
Zitat:
Das ist anders, wenn man string[200] o.ä. nimmt, dann werden zB 201 chars reserviert. Gammtester |
Re: Records dynamisch verschachteln
Nein, der Punkt ist, dass am Ende jeder Prozedur, die direkt oder indirekt Ansistrings, dynamische Arrays, Variants oder Interfaces verwendet, aufgeräumt werden muss, damit der Referenzzähler stimmt, eben im Gegensatz zu einfachen Typen oder Objektinstanzen. In varianten Records weiß Delphi dann natürlich nicht, ob jetzt ein String oder ein Integer im Record steht, und entsprechend, ob ein Referenzzähler aktualisiert werden muss.
|
Re: Records dynamisch verschachteln
Also mir kommt dass so vor, als das in eine Endlose diskusion geht.
Ich würde es auch mit Streams versuchen. Einen Record vieleicht, denn du dan in den Stream schreibst und dan rausliest. |
Re: Records dynamisch verschachteln
Darf man fragen, welchen Weg der Kommunikation zwischen Client und Server du dir gedacht hast?
Bedenke dabei, dass Client und Server in unterschiedlichen Adressbereichen laufen... Ergo wirst du dir bestimmt überlegt habe, wie die Daten vom Client zum Server und anders herum gelangen. |
Re: Records dynamisch verschachteln
Client:
Delphi-Quellcode:
Server:procedure TMainForm.ConnectBtnClick(Sender: TObject); var buffer: TIdBytes; begin MsgRec.id := 1; MsgRec.auth.version := '0.1'; MsgRec.auth.nickname := nick_input.text; MsgRec.auth.password := pw_input.text; try Client.Connect; buffer := RawToBytes(MsgRec, SizeOf(TMsgRec)); Client.IOHandler.Write(buffer); except ShowMessage('Verbindung konnte nicht hergestellt werden'); end; end;
Delphi-Quellcode:
procedure TMainForm.ServerExecute(AContext: TIdContext); var MsgRec: TMsgRec; buffer: TIdBytes; begin AContext.Connection.IOHandler.ReadBytes(buffer, SizeOf(TMsgRec)); BytesToRaw(buffer, MsgRec, SizeOf(TMsgRec)); case MsgRec.Id of 1: ClientAuth(MsgRec, AContext); end; end; procedure TMainForm.ClientAuth(MsgRec: TMsgRec; Client: TIdContext); var i: Integer; begin for i := 0 to concnt do begin //Namenszuweisung für IP! if Connections[i].client.Binding.PeerIP = Client.Binding.PeerIP then begin Connections[i].name := MsgRec.auth.nickname; WriteProtocol('Client #' + IntToStr(concnt) + ': ' + Connections[i].client.Binding.PeerIP + ' changed Name to "' + Connections[i].name + '"'); end; end; UpdateClientList; end; Klappt auch super :] Muss jetzt nur noch einen Weg finden die Clients eindeutig zu identifizieren, auch wenn die IP dieselbe ist (das Anhängen der Identifizierungsinformationen an das Data Object scheint nicht zu klappen da der Client bei Indy 10 kein Data Objekt besitzt) |
Re: Records dynamisch verschachteln
Hmmm ich würde für den Zweck COM+/DCOM verwenden, aber wenns funtioniert, dann hau rein :D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06: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 by Thomas Breitkreuz