AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Funktionszeiger in StringList.Objects speichern und nutzen
Thema durchsuchen
Ansicht
Themen-Optionen

Funktionszeiger in StringList.Objects speichern und nutzen

Ein Thema von Master_BB · begonnen am 19. Nov 2009 · letzter Beitrag vom 19. Nov 2009
Antwort Antwort
Seite 1 von 2  1 2      
Master_BB

Registriert seit: 17. Mai 2003
285 Beiträge
 
Delphi 7 Professional
 
#1

Funktionszeiger in StringList.Objects speichern und nutzen

  Alt 19. Nov 2009, 11:12
Hallo,
Ich würde gerne in einer TStringList per AddObject('SomeStr', @ReadBla); hinzufügen
ReadBla ist definiert als function ReadBla(AItem, BItem : Tobject) :boolean.

Der Aufruf AddObject wie oben funktioniert nicht. Also Baue ich folgendes

TReadMethod = function(A, B : TObject) : boolean of object;

dann

Delphi-Quellcode:
var
  AMethod : TReadMethod;
begin
  AMethod := ReadBla;
  AStringList.AddObject('Bla', AMethod);
end;
Das funktioniert, obwohl ich mir nicht sicher bin ob AMethod wirklich ein Object ist.
Jetzt habe ich das Problem wie rufe ich AMethod aus AStringList auf?

  (AStringList.objects[0] as TReadMethod)(AObject, BObject); //FUNKTIONIERT NICHT! Wenn mir da jemand weiterhelfen könnte wäre das sehr schick.

Gruß
Wenn das Meer unruhig ist und der Wind die Wellen treibt, erfreut es, vom Strand aus die Mühen eines Anderen zu beobachten.
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#2

Re: Funktionszeiger in StringList.Objects speichern und nutz

  Alt 19. Nov 2009, 11:21
Mahlzeit!

Warum muss es denn eine TStringList sein? Ist das nicht irgendwie... pervers ? Nichts für ungut ..
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.068 Beiträge
 
Delphi 12 Athens
 
#3

Re: Funktionszeiger in StringList.Objects speichern und nutz

  Alt 19. Nov 2009, 11:21
Sowas geht nicht "direkt", denn function of object ist kein "einfacher" Prozedur-Zeiger, sondern er ist ein Methoden-Zeiger und besteht eigentlich aus 2 Zeigern ala 8 Byte (einmal auf die Funktion und dann nocheiner zum Objekt)

Also paßt er nicht in einen "normalen" 4-Byte-Zeiger rein.


Du müßtest dir z.B. mit Delphi-Referenz durchsuchenNew Speicher für einen Metodenzeiger reservieren und den Zeiger zu diesem Speicher dann der Liste hinzufügen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Master_BB

Registriert seit: 17. Mai 2003
285 Beiträge
 
Delphi 7 Professional
 
#4

Re: Funktionszeiger in StringList.Objects speichern und nutz

  Alt 19. Nov 2009, 11:26
puh,
schade, nagut dann baue ich ein Object dessen Eigenschaft den Zeiger beinhaltet und packe das dort rein.
Thx für die schnellen Antworten
Wenn das Meer unruhig ist und der Wind die Wellen treibt, erfreut es, vom Strand aus die Mühen eines Anderen zu beobachten.
  Mit Zitat antworten Zitat
Master_BB

Registriert seit: 17. Mai 2003
285 Beiträge
 
Delphi 7 Professional
 
#5

Re: Funktionszeiger in StringList.Objects speichern und nutz

  Alt 19. Nov 2009, 11:37
@himitsu

Hey ich probiere gerade deine Methode über new aus.
Also Definiere ich
Delphi-Quellcode:
var
  ARead : ^TReadMethod;
begin
  New(ARead);
  ARead^ := ReadBla;
  AStringList.AddObject('Bla', ARead);
end;
Wie Rufe ich die ganze Sache jetzt auf?
TReadMethod(AStringList.Objects[0])^(A,B) funktioniert nicht
Wenn das Meer unruhig ist und der Wind die Wellen treibt, erfreut es, vom Strand aus die Mühen eines Anderen zu beobachten.
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Funktionszeiger in StringList.Objects speichern und nutz

  Alt 19. Nov 2009, 11:40
Müsste das nicht so heißen: "TReadMethod(Pointer(AStringList.Objects[0])^)(A,B)"
(Kann´s gerade nicht testen)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#7

Re: Funktionszeiger in StringList.Objects speichern und nutz

  Alt 19. Nov 2009, 11:41
Kann man Methoden überhaupt ohne Objekt aufrufen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Master_BB

Registriert seit: 17. Mai 2003
285 Beiträge
 
Delphi 7 Professional
 
#8

Re: Funktionszeiger in StringList.Objects speichern und nutz

  Alt 19. Nov 2009, 11:48
Die Methode ReadBla ist innerhalb des Objektes definiert, also existiert ja ein Objekt.

@mleyen ja das könnte vlt funktionieren aber ich sehe gerade das
die Zuweisung

AStringList.AddObject('Bla', ARead);

nicht funktioniet. ARead ist für ihn kein Objekt.
Habe ARead nach dem new Beispiel folgendermaßen definiert
Delphi-Quellcode:
TReadMethod = function(A, B : TObject) : boolean of object;
PReadMethod = ^TReadMethod
...
var
  ARead : PReadMethod
Wenn das Meer unruhig ist und der Wind die Wellen treibt, erfreut es, vom Strand aus die Mühen eines Anderen zu beobachten.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

Re: Funktionszeiger in StringList.Objects speichern und nutz

  Alt 19. Nov 2009, 11:56
Wieso fügst Du dann nicht das Objekt in die Liste ein statt "mit Gewalt" nur dessen Methode?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.068 Beiträge
 
Delphi 12 Athens
 
#10

Re: Funktionszeiger in StringList.Objects speichern und nutz

  Alt 19. Nov 2009, 12:01
das Zuweisen das ist schonmal OK
Delphi-Quellcode:
var
  ARead : PReadMethod;
begin
  New(ARead);
  ARead^ := ReadBla;
  AStringList.AddObject('Bla', ARead);
end;
das Auslesen einfach so
PReadMethod(AStringList.Objects[0])^ Und am Ende nicht das Freigeben (Dispose) vergessen.


@DeddyH: wenn er :=ReadBla nutzt, dann wird dieser Code vermutlich direkt in der Klasse ( :=Self.ReadBla ) rumliegen ... also kein Problem
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:46 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