Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi RTTI - Methodenpointer durch Name rausfinden (https://www.delphipraxis.net/100936-rtti-methodenpointer-durch-name-rausfinden.html)

Neutral General 5. Okt 2007 17:21


RTTI - Methodenpointer durch Name rausfinden
 
Hi,

Ich hab ne Klasse

Delphi-Quellcode:
{$M+}
  TKlasse = class
    procedure Irgendwas;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
{$M-}
Und wie komm ich jetzt durch den Namen 'Irgendwas' an den Pointer der Methode? Weil in der Exe ist folgendes gepeichert:

Zitat:

IrgendwasTKlasse
Das heißt man müsste doch auch irgendwie durch den Namen an die Adresse kommen. Die Frage ist: Wie?

Gruß
Neutral General

Dax 5. Okt 2007 17:25

Re: RTTI - Methodenpointer durch Name rausfinden
 
TObject.MethodAddress

edit: da war ein Get zu viel

Neutral General 5. Okt 2007 17:35

Re: RTTI - Methodenpointer durch Name rausfinden
 
Ok danke. Kleine Frage noch:

Delphi-Quellcode:
TTata = procedure (blabla: Integer) of object;

var x: TTata;
begin
  x := AObject.MethodAddress('Irgendwas'); // kann man nicht zuweisen
Wie kann man x dann diesen Pointer zuweisen?

EDIT:

Ists so richtig?

Delphi-Quellcode:
x := TTata(AObject.MethodAddress('Irgendwas')^);
?

Also ich bekomme da ne AV...

Neutral General 5. Okt 2007 17:45

Re: RTTI - Methodenpointer durch Name rausfinden
 
Sry für den Doppelpost aber ich wollte bescheid sagen:

ICH HABS! :) :firejump:

Danke Dax !

idontwantaname 5. Okt 2007 19:04

Re: RTTI - Methodenpointer durch Name rausfinden
 
Dann verrate uns doch bitte, im besonderen für Leute, die dasselbe Problem besitzen, wie du es gelöst hast.

Neutral General 6. Okt 2007 13:36

Re: RTTI - Methodenpointer durch Name rausfinden
 
Hi,

Habs so gemacht (gefunden durch DP-Suche)

Delphi-Quellcode:
var _Create: TMethod;
begin
  _Create.Code := MethodAddress('NamederMethode');
  _Create.Data := Self;
  FOnCreate := TCreateEvent(_Create);
  // ...
end;
Gruß
Neutral General


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 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