| Autor |
Beitrag |
FinalFantasy
      
Beiträge: 127
Windows XP
Delphi 5 Professional, Visual Studio 7 .NET (C#)
|
Verfasst: Mo 11.07.05 14:37
Hi,
Ich habe hier bei einem Socket die Callbackfunktion OnConnect.
Ich starte jedoch mehrere Instanzen der Klasse, die jede für sich eine Socket öffnet, natürlich sollte der Callback OnConnect dann auch auf eine Methode genau dieser Instanz laufen, die auch den Socket erzeugt hat.
Wie kann ich denn eine Callback Funktion auf eine bestimmte Methode einer bestimmten Instanz machen?
Ich hoffe, ihr versteht, was ich meine!
|
|
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: Mo 11.07.05 15:55
FinalFantasy hat folgendes geschrieben: | | Ich hoffe, ihr versteht, was ich meine! |
Nicht so richtig
Du kannst das Ereignis irgendwo hin richten. Wenn du es lokal verwenden willst, dann setzt du es auch eine Methode deiner Klasse. Wo ist jetzt dein Problem?
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
MrSaint
      
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: Mo 11.07.05 16:27
Ich gaklube ich hab dich vertsanden, hatte auch schonmal sowas in der Art: www.delphi-forum.de/viewtopic.php?t=30581
--> Es geht nicht. Alle Instanzen einer Klasse benutzen die gleiche "Instanz" einer Prozedur. SPrich also: die Procedure TMyClass.xyz liegt genau ein mal im Speicher. wenn ich jetzt mehrere Instanzen dieser Klasse habe, wir immer die gleiche Speicherstelle aufgerufen, wenn ich Instanz1.xyz; und Instanz2.xyz; mache (um die Instanzen in der Procedure dann zu untershceiden, wird noch ein "unsichtbarer" Parameter mitgeführt). Folglich kann ich auch keine Funktion/Procedurte einer Klasse als Callback Funktion angeben. Es müssen Proceduren/Funktionen außerhalb von klassen sein, also z.B. procedure CallbackFnkt(...);.
MrSaint
_________________ "people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 11.07.05 17:14
MakeObjectInstance. Damit geht das zwar, aber sollte man vermeiden.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
FinalFantasy 
      
Beiträge: 127
Windows XP
Delphi 5 Professional, Visual Studio 7 .NET (C#)
|
Verfasst: Mo 11.07.05 20:00
Mhm, MrSaint trifft mein Problem. Das hab ich mir schon fast gedacht, dass es sowas in der Art ist. Naja, muss ich mir eine andere Lösung einfallen lassen.
Trotzdem danke.
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mo 11.07.05 21:12
Ich versteh das Problem nicht ganz.. wieso brauchst du dieselbe Methode mehrmals? Es ist ja egal dass die Methode nur 1x im Speicher liegt, schließlich wird eh die Objektreferenz mitgegeben auf die zugegriffen werden soll..! Es stellt auch kein Problem dar, wenn man Threads verwendet, da ja jeder Thread seinen eigenen Stack hat etc, es kann also eine Methoden, obwohl sie nur 1x im Speicher existiert, problemlos parallel x-mal gleichzeitig ausgeführt werden. Der Zugriff auf eventuell gemeinsam benutzte Resourcen muss natürlich synchronisiert werden, aber das hat ja nichts damit zu tun wie oft die Methode im Speicher liegt!!
Oder versteh ich irgendwas falsch? Irgendwie komm ich nicht ganz hinter den Sinn des ganzen..
Gruß, Motzi
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
MrSaint
      
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: Mo 11.07.05 21:16
Motzi hat folgendes geschrieben: | | Es ist ja egal dass die Methode nur 1x im Speicher liegt, schließlich wird eh die Objektreferenz mitgegeben auf die zugegriffen werden soll..! |
Im Normalfall korrekt. Wenn das aber eine Callback Funktion sein soll, die ich z.B. einer API-Fnkt übergebe, wird die Klassenreferenz plötzlich nicht mehr mit übergeben, weil die API-Fnkt. diese Referenz einfach nicht kennt!
MrSaint
_________________ "people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Mo 11.07.05 21:39
Das ist richtig.. in so einem Fall hilft MAKEOBJECTINSTANCE weiter... Aber das OnConnect im ersten Beitrag hat mich vermuten lassen, dass es sich um ein Event, also einen Methodenzeiger, handelt...
Gruß, Motzi
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
FinalFantasy 
      
Beiträge: 127
Windows XP
Delphi 5 Professional, Visual Studio 7 .NET (C#)
|
Verfasst: Di 12.07.05 07:10
Es ist ja auch ein Event/Methodenzeiger, nur anscheinend wird wirklich keine Objektinstanz mit übergeben. Jedenfalls sind beim Aufruf sämtliche Membervariablen der Klasse (speziell dieser einen Instanz) leer.
|
|
Motzi
      
Beiträge: 2931
XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
|
Verfasst: Di 12.07.05 08:50
Dann zeig am besten mal ein bisschen Code..!
_________________ gringo pussy cats - eef i see you i will pull your tail out by eets roots!
|
|
FinalFantasy 
      
Beiträge: 127
Windows XP
Delphi 5 Professional, Visual Studio 7 .NET (C#)
|
Verfasst: Di 12.07.05 10:21
Ok, habs scho gefunden... Hab nur ein paar Objekte durcheinander gebracht...
|
|