![]() |
Sockets und Zeiger....
Hallo,
habe folgenden Programmcode:
Delphi-Quellcode:
So, nun zu meinem Problem... habe noch nie so richtig mit Zeigern gearbeitet aber ich würde natürlich hier gerne Wissen welchen Client ich im TClient wiedertype TClient = record Socket:^TCustomWinSocket; Nickname:String; free:Boolean; end; Clients: array [1..200] of TClient; procedure TMainForm.ServerClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); var i:integer; begin dec(connected); for I := 1 to 200 do begin if @Socket=@Clients[i].Socket then begin //Hier stimmt etwas nicht Clients[i].Nickname:=''; Clients[i].free:=true; Clients[i].Socket:=nil; end; end; UpdateUser; end; freigeben kann. Also habe ich mir gedacht vergleich doch einfach die Speicheradressen... Aber es geht nicht :-( Danke für Eure Hilfe!! Gruß Andy |
Re: Sockets und Zeiger....
1. Socket ist eine Eigenschaft und kann somit nicht als Ziel für einen Zeiger dienen, schliesslich kann sich dahinter ein Getter und/oder Setter befinden.
2. Eine Instanz ist intern schon ein Zeiger, somit lasse das ^ komplett weg... |
Re: Sockets und Zeiger....
Hi ich würds so machen:
Delphi-Quellcode:
EDIT: Oder falls das nicht nötig ist kannst du das Socket im Record direkt als TCustomWinSocket deklarieren..
if Socket^ = Clients[i].Socket then begin
Gruß Neutral General |
Re: Sockets und Zeiger....
Hallo,
danke für Eure Antworten! Nein geht leider nicht :-(. Mhmh wie könnte ich dann erkennen welche Client disconnected? Danke Gruß Andy |
Re: Sockets und Zeiger....
Du arbeitest einfach komplett ohne Zeiger! Die braucht man bei Klassen praktisch gar nicht.
Delphi-Quellcode:
Und dann ohne ^ und @ arbeiten.
TClient = record
Socket:TCustomWinSocket; //!!! Nickname:String; free:Boolean; |
Re: Sockets und Zeiger....
Hallo,
habe das jetzt über das Handle gemacht.... Also ich speichere das Handle.... und lese es dann wieder aus zum vergleichen... Nur bleibt das Handle auch gleich? Habe ich nicht gewusst dass es auch ohne Zeiger geht habe ich mal bei einem Tutorial gesehen... Währe mir lieb wenn die drinbleiben könnten *g* Danke Gruß Andy |
Re: Sockets und Zeiger....
Wenn du zwei Klassen einander zuweist
Delphi-Quellcode:
dann zeigen die auf denselben Speicherbereich. Irgendwo war mal ein Beispiel in der Hilfe:
objekt1:=objekt2;
Delphi-Quellcode:
Ich hoffe mal, das Beispiel hat das ein bisschen verdeutlicht.
var Objekt1,Objekt2:TMeinObjekt;
begin Objekt1:=TMeinObjekt.create; Objekt1.a:=3; Objekt2:=Objekt1; //keinen Konstruktor aufrufen, sonst gibt es ein Speicherleck! Objekt2.a:=5; //Jetzt hat Objekt1.a den Wert 5! end; Mit dem Handle kann man es auch machen, das bleibt soweit ich weiß immer gleich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 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