AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Objekte zur Laufzeit inspizieren ( a la BlueJ )
Thema durchsuchen
Ansicht
Themen-Optionen

Objekte zur Laufzeit inspizieren ( a la BlueJ )

Ein Thema von math65 · begonnen am 7. Okt 2006 · letzter Beitrag vom 19. Okt 2006
Antwort Antwort
math65

Registriert seit: 26. Mär 2006
2 Beiträge
 
Delphi 7 Personal
 
#1

Objekte zur Laufzeit inspizieren ( a la BlueJ )

  Alt 7. Okt 2006, 00:59
Ich würde gerne eine Delphi-Umgebung in der Art von BlueJ entwickeln, in der zur Laufzeit interaktiv zu allen definierten (eigenen!) Klassen
- Objekte erzeugt werden können
- deren Eigenschaften mit aktuellen Werten inspiziert werden können
- deren Methoden gesehen und aktiviert werden können.

Und das Ganze so, dass die selbst definierten Klassen keinen eigenen Verwaltungs-Overhead (kein spezialisiertes Create) benötigen.

Geht so etwas in Delphi?
Kann ich zur Laufzeit irgendwo eine Liste aller definierten (compilierten) Klassen finden?

Hilfe wäre klasse...!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Objekte zur Laufzeit inspizieren ( a la BlueJ )

  Alt 7. Okt 2006, 05:45
Sicherlich gibt es sowas. Die IDE macht es ja genauso. Die einzige Hilfe die es bekommt ist die Register-Procedure in Packages. Das einige was nicht geht wird sein das du nicht so einfach Methoden aufrufen kannst, da diese nicht per RTTI bestimmbar sind.

Da sind wir beim Thema RTTI. Über RTTI (Runtime Type Information) kannst Du dir alle (published) Eigenschaften und Methoden (Normalerweise werden Methoden nicht published, aber das DUnit-Testframework macht sowas) auslesen. Du kannst ja dort mal nachschauen was die alles aus den RTTI-Infos machen. Komponenten um die Eigenschaften zu inspizieren gibt es z.B. bei der Jedi oder im ElPack.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
7. Okt 2006, 10:50
Dieses Thema wurde von "Matze" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
In die Code-Library gehören nur fertige Code-Snippets.
math65

Registriert seit: 26. Mär 2006
2 Beiträge
 
Delphi 7 Personal
 
#4

Re: Objekte zur Laufzeit inspizieren ( a la BlueJ )

  Alt 18. Okt 2006, 01:10
Danke, Bernhard!

Nur... die Sache ist nicht so leicht...!
Die DUnit erscheint schrecklich kompliziert,
bei JEDI hab ich nichts passendes gefunden,
und ElPack kenn ich nicht.

Vielleicht ein Beispiel für mein Anliegen:

Ich hab eine Klasse definiert:

TAuto = class(Tpersistent)
private nr: string;
private ps: integer;

procedure fahre(s: real);
procedure bremse(s: real);
end;

Würde dann gern ein Auto-Objekt erzeugen...

var auto: TAuto;
begin
auto := TAuto.Create;

... und dann i r g e n d w i e (?) herausfinden/anzeigen können, welche Datenfelder und welche Methoden dieses Auto nun hat.
Die Zeile:

edit1.Text := inttostr(auto.getinterfacetable.EntryCount);

wird zwar vom Compiler akzeptiert, liefert aber einen Laufzeitfehler (Zugriffsverletzung, Lesen von Adresse 0 ).
Sonstige nützliche/informative Prozeduren oder Funktionen hab ich bislang nicht gefunden -
bin ein wenig gefrustet...

Gibt es bzw. hast Du hierfür Hilfe???



Und als weiteres Problem: Wie könnte ich eine Methode aufrufen, von der erst zur Laufzeit (!) bekannt ist, wie sie heisst, und zwar in Form einer String-Variable??
Z.B. hätte ich:

objekt, methode: string;

Wunsch: Ausführen per ...?(objekt). ...?(methode)


Ist diese Sache prinzipiell unmöglich, weil Delphi eine Compilersprache ist und daher eine (dynamische) Interpretation von Befehlen nicht realisierbar ist???


Schöne Grüße

math65
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

Re: Objekte zur Laufzeit inspizieren ( a la BlueJ )

  Alt 18. Okt 2006, 19:26
Zitat von math65:
Danke, Bernhard!

Nur... die Sache ist nicht so leicht...!
...
bei JEDI hab ich nichts passendes gefunden,
Hmm ... also bei meinen Jedis ist ein TJvInspector dabei, der genau das machen sollte, was du willst ...


Zitat:
Und als weiteres Problem: Wie könnte ich eine Methode aufrufen, von der erst zur Laufzeit (!) bekannt ist, wie sie heisst, und zwar in Form einer String-Variable??
Z.B. hätte ich:

objekt, methode: string;

Wunsch: Ausführen per ...?(objekt). ...?(methode)


Ist diese Sache prinzipiell unmöglich, weil Delphi eine Compilersprache ist und daher eine (dynamische) Interpretation von Befehlen nicht realisierbar ist???


Schöne Grüße

math65
Ich glaube, das geht nicht:
Zitat von Bernhard Geyer:
Das einige was nicht geht wird sein das du nicht so einfach Methoden aufrufen kannst, da diese nicht per RTTI bestimmbar sind.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Objekte zur Laufzeit inspizieren ( a la BlueJ )

  Alt 18. Okt 2006, 20:01
Willkommen in der Delphi PRAXiS, math65!

Einfach wird es bestimmt nicht, aber du kannst dich ja mal einlesen:

Hallvard's Blog - Extended Class RTTI

Hallvard's Blog - Published methods
Hallvard's Blog - Under the hood of published methods
Hallvard's Blog - Hack #10: Getting the parameters of published methods

David Glassborow - Interface RTTI
David Glassborow - Class RTTI

Offenbar gibt es Möglichkeiten, getestet habe ich sie allerdings nicht.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Objekte zur Laufzeit inspizieren ( a la BlueJ )

  Alt 18. Okt 2006, 22:29
Die $METHODINFO und $TYPEINFO Compilerschalter sind mir neu. Aber gut zu wissen das es sowas auch für Win32 in Delphi gibt. Evtl. ergeben sich damit einige Möglichkeiten ...
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#8

Re: Objekte zur Laufzeit inspizieren ( a la BlueJ )

  Alt 19. Okt 2006, 13:23
evtl. nützt es dir etwas, wenn du dir den Quellcode vom DFMEdit anschaust, da ist ziemlich viel RTTI verbaut.
Jedoch gibt es imho keine Möglichkeit, die registrierten Klassen sinnvoll zu enumerieren. Die Objektliste wird beim DFMedit mithilfe einer INI-Datei erstellt.

HTH
Frank
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:49 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