Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: mit string an PTypeinfo rankommen

  Alt 27. Apr 2006, 16:16
Ich habe deinen Source 1 zu 1 nun mal in Delphi 5 und Delphi 3 getestet. Jeweils ohne und mit Packages. Es funktionierte immer egal ob ich TBorderIcon oder TBorderIcons benutze.

Es sieht wohl so aus das du Unit Forms.pas garnicht in deinem Projekt benutzt und der Compiler somit auch nicht den Typ TBorderIcon einlinkt.

Obige Methode kann ja nur RTTIs finden die auch im Program verwendet werden !!

Am besten kompilierst du dein Projekt mal mit Packages so das Package VCL30.dpl auch eingelinkt wird. Dann müsste deine obige Funktion auch diese RTTI finden da nun der Compiler/Linker diesen Typ nicht mehr aus dem VCL30 Package "weg-linken" kann

Mit GetModuleFindName(FindHInstance(PTypeInfo), xzy); kannst du dann sehen das diese RTTI im Codesegment des Packages VCL30 abgelegt ist.

Gruß Hagen

[edit]
Und nochwas !! Kann es sein das du diese Funktion in eine DLL augelagert hast ? Das kann dann nicht funktioinieren da dann nur die RTTI innerhalb dieser DLL iteriert wird. Du müsstest das Modul-Handle -> HInstance des Prozesses dazu haben und an EnumTypeInfo() übergeben. Bei einer DLL die Packages benutzt und die Hauptanwendung benutzt die gleichen Packages wird EnumModules() innerhab der DLL auf die gleichen globalen Datenstrukturen zugreifen wie der Hauptprozess. Dh. in diesem Moment hat diese DLL auch Zugriff auf die Liste aller geladenen Module im Prozess und kann somit auch alle RTTIs finden.
Falls du NICHT mit Packages arbeiten möchtest aber denoch eine DLL benutzen willst so kann ich dir einen weiteren Trick geben der denoch alle Module des Prozesses itererien kann.
[/edit]
  Mit Zitat antworten Zitat