Einzelnen Beitrag anzeigen

Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Auslesen von Eigenschaften (published und public) Problem

  Alt 2. Sep 2008, 14:10
Hallo,

ich benötige Eure Hilfe zu folgender Problemstellung:

Wir haben mehrere Delphi-Anwendungen (mit 3rd Party Komponenten) die um automatisierte Tests durchzuführen ausgelesen/gesteuert werden müssen.

Es gibt mehrere Vorgehensweisen.
  • Es wird eine "TestEnabler.pas" in die zu testende Applikation kompiliert.
    Vorteile:
    • Mittels RTTI kann man relativ einfach generisch für alle Objekte auf die published Eigenschaften zugreifen.
    • Auf public Eigenschaften / Methoden kann mittels Casting ohne Probleme zugegriffen werden.
    Nachteile:
    • Kein generischer Zugriff auf public Eigenschaften via RTTI
    • Bei jeder Änderung der Testsoftware (Testenabler.pas) muss die zu testende Anwendung neu kompiliert werden.
    • Applikation muss modifiziert werden (TestEnabler muss einkompiliert werden. Nicht möglich bei Applikationen ohne Quelltext.)
  • Mittels dll-injection wird eine Dll-Datei zur Laufzeit in die Anwendung injiziert.
    Vorteile:
    • Anwendung muss nicht modifiziert werden
    Nachteile:
    • die injizierte Dll-Datei hat ihre eigene RTL und natürlich eigenen MemoryManager
      Daraus ergeben sich verschiedene Probleme:
      • Vergleiche in der Dll mit "ObjVonApp is TClassVonDll" schlägt immer fehl.
      • Zugriffe auf virtuelle Methoden (Eigenschaften mit virtuellen Gettern) werden mit einer allgemeinen Schutzverletzung quittiert.
        (Das könnte man evtl. mit einem MemoryManagerProxy lösen, der den MemoryManager der Dll durch den der Applikation ersetzt.)
      • Versionskonflikte: Alle Komponenten müssen in der gleichen Version vorliegen wie in der Applikation.
        (Das könnte man mit einem Plugin-Konzept lösen, sofern man die Version der verwendeten Komponenten ermitteln kann.
        z.B. Unterscheidung zwischen "Delphi 2007 für Win32 RTM" und "Delphi 2007 für Win32 mit Dez.07 Update" oder verschiedene Versionen von 3rd Party Komponenten)
Folgende Fragen habe ich im Moment:
  • Wie kann ich z.B. via RTTI public Eigenschaften auslesen / setzen?
  • Gibt es noch andere Methoden an diese Informationen zu kommen?
  • Hat jemand Erfahrungen mit einem "MemoryManagerProxy"?
    Welche Probleme warten da noch auf uns.
  • Wie komme ich via dll-injection an die published / public Eigenschaften der Objekte?
  • Kann man evtl. die Probleme umgehen, wenn man ein Package injiziert?
    bzw. geht das überhaupt?
  • Gibt es noch weitere wichtige Nachteile zu den oben aufgeführten Punkten?

Ich hoffe, das einige Spezialisten wie Hagen, Andreas, Nico, Olli oder Daniel das hier lesen und vielleicht helfen können.
(Ich weiß, es gibt hier noch mehr Spezialisten, nicht böse sein, weil ich hier nur 5 angegeben habe.)

Ich freue mich natürlich über jede konstruktive Antwort.

Vielen Dank im Voraus
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat