AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Sockets und Zeiger....

Sockets und Zeiger....

Ein Thema von Dragon27 · begonnen am 7. Jun 2007 · letzter Beitrag vom 7. Jun 2007
Antwort Antwort
Dragon27

Registriert seit: 20. Nov 2003
Ort: Aßling
543 Beiträge
 
Delphi XE6 Enterprise
 
#1

Sockets und Zeiger....

  Alt 7. Jun 2007, 12:12
Hallo,

habe folgenden Programmcode:

Delphi-Quellcode:

type
  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;
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 wieder
freigeben kann. Also habe ich mir gedacht vergleich doch einfach die Speicheradressen... Aber es geht nicht

Danke für Eure Hilfe!!

Gruß

Andy
Delphi is ......... DELPHI!!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Sockets und Zeiger....

  Alt 7. Jun 2007, 12:14
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...
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Sockets und Zeiger....

  Alt 7. Jun 2007, 12:14
Hi ich würds so machen:

if Socket^ = Clients[i].Socket then begin EDIT: Oder falls das nicht nötig ist kannst du das Socket im Record direkt als TCustomWinSocket deklarieren..

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Dragon27

Registriert seit: 20. Nov 2003
Ort: Aßling
543 Beiträge
 
Delphi XE6 Enterprise
 
#4

Re: Sockets und Zeiger....

  Alt 7. Jun 2007, 12:16
Hallo,


danke für Eure Antworten! Nein geht leider nicht .

Mhmh wie könnte ich dann erkennen welche Client disconnected?

Danke Gruß


Andy
Delphi is ......... DELPHI!!
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Sockets und Zeiger....

  Alt 7. Jun 2007, 12:28
Du arbeitest einfach komplett ohne Zeiger! Die braucht man bei Klassen praktisch gar nicht.
Delphi-Quellcode:
TClient = record
    Socket:TCustomWinSocket; //!!!
    Nickname:String;
    free:Boolean;
Und dann ohne ^ und @ arbeiten.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Dragon27

Registriert seit: 20. Nov 2003
Ort: Aßling
543 Beiträge
 
Delphi XE6 Enterprise
 
#6

Re: Sockets und Zeiger....

  Alt 7. Jun 2007, 12:31
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
Delphi is ......... DELPHI!!
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Sockets und Zeiger....

  Alt 7. Jun 2007, 12:36
Wenn du zwei Klassen einander zuweist
objekt1:=objekt2; dann zeigen die auf denselben Speicherbereich. Irgendwo war mal ein Beispiel in der Hilfe:
Delphi-Quellcode:
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;
Ich hoffe mal, das Beispiel hat das ein bisschen verdeutlicht.

Mit dem Handle kann man es auch machen, das bleibt soweit ich weiß immer gleich.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:55 Uhr.
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