AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ClassInfo = nil ? o.O

Ein Thema von Neutral General · begonnen am 31. Aug 2006 · letzter Beitrag vom 1. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

ClassInfo = nil ? o.O

  Alt 31. Aug 2006, 19:21
Hi,

Was ich gerade gemerkt hab: TObject.ClassInfo = nil
Und auch das ist auch bei manchen von TObject abgeleiteten Klassen so, z.B bei TList (sowei ich das weiß) und auch dummerweise bei allen Sprites ((TSprite = class, TImageSprite = class(TSprite)) = nil
Aber ich brauch das o.O Dringend!
Was ist da los? Ist der Pointer "nur" falsch oder haben diese Klassen aus irgendeinem Grund kein ClassInfo?

Delphi-Quellcode:
class function TObject.ClassInfo: Pointer;
begin
  Result := PPointer(Integer(Self) + vmtTypeInfo)^;
end;
Was ich festgestellt habe ist das Integer(TObject) jedesmal eine andere Zahl liefert o.O Im Gegensatz zu allen anderen Klassen. Aber bei TList und TSprite sind die Zahlen konstant aber es klappt trotzdem nicht.. Also TSprite.ClassInfo = nil

Was ist das und was mache ich da am besten?
Kann man da was machen?

ADD: Hab auch aus Verzweiflung mal statt vmtTypeInfo +/- irgendwelche zahlen gemacht.. aber immer AV.. dann hab ich mir die Zahlen geben lassen bei der es keine AV gibt (try-except) und hab die ausprobiert.. Aber an der Adresse ist vielleicht irgendwas.. Aber kein Classinfo -.-^^

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

Re: ClassInfo = nil ? o.O

  Alt 31. Aug 2006, 20:27
Ich habe gerade kein Delphi hier, aber mit der Unit hole ich mir normalerweise MetaClasses/VMT.

Delphi-Quellcode:
unit uRttiHelpers;

interface

type
  PClass = ^TClass;
  PSafeCallException = function(self : TObject;
                                exceptObject : TObject;
                                exceptAddr : Pointer) : HResult;
 
  PAfterConstruction = procedure(self : TObject);
  PBeforeDestruction = procedure(self : TObject);
  PDispatch = procedure(self : TObject; var message);
  PDefaultHandler = procedure(self : TObject; var message);
  PNewInstance = function(self : TClass) : TObject;
  PFreeInstance = procedure(self : TObject);
  PDestroy = procedure(self : TObject; outerMost : Shortint);

  PVmt = ^TVmt;
  TVmt = packed record
    SelfPtr : TClass;
    IntfTable : Pointer;
    AutoTable : Pointer;
    InitTable : Pointer;
    TypeInfo : Pointer;
    FieldTable : Pointer;
    MethodTable : Pointer;
    DynamicTable : Pointer;
    ClassName : PShortString;
    InstanceSize : PLongint;
    Parent : PClass;
    SafeCallException : PSafeCallException;
    AfterConstruction : PAfterConstruction;
    BeforeDestruction : PBeforeDestruction;
    Dispatch : PDispatch;
    DefaultHandler : PDefaultHandler;
    NewInstance : PNewInstance;
    FreeInstance : PFreeInstance;
    Destroy : PDestroy;
  end;

function GetVmt(classReference : TClass) : PVmt;

implementation

function GetVmt(classReference : TClass) : PVmt;
begin
  Result := PVmt(classReference);
  Dec(Result);
end;

end.
Oki, hab's gerade wieder installiert ( wurde auch Zeit ) und wie ich es mir dachte gates.
edit: lol, mein Copy and Waste Knopf muss wohl kaputt sein
Miniaturansicht angehängter Grafiken
tobject.classname_211.png  
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: ClassInfo = nil ? o.O

  Alt 31. Aug 2006, 20:39
Ok danke
Das würde mir glaub ich auch helfen aber ich benutze die Unit TypInfo.pas und die procedure GetPropList... Und intern wird da auf Classinfo zugegriffen..
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

Re: ClassInfo = nil ? o.O

  Alt 31. Aug 2006, 20:44
Zitat von Neutral General:
Ok danke
Das würde mir glaub ich auch helfen aber ich benutze die Unit TypInfo.pas und die procedure GetPropList... Und intern wird da auf Classinfo zugegriffen..
Na dann erklär' mir doch was dir eine Classreference bringt ohne dass sie auf irgendetwas zeigt?
Alle class methods aus TObjects liegen ja praktisch gesehen *vor* dem Index der ersten Methode.
Und TObject hat praktisch gesehen keine Felder (bis auf den Zeiger zur VMT).
Bei TObject weißt du ja von vornherein dass da nix rauskommt.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: ClassInfo = nil ? o.O

  Alt 31. Aug 2006, 21:30
Zitat von Neutral General:
Was ich gerade gemerkt hab: TObject.ClassInfo = nil
TObject ist nicht mit RunTimeTypeInformation kompiliert. TPersistent ist die erste Klasse in der RTL/VCL, die mit RTTI kompiliert ist. Deswegen haben alle TPersistent-Nachkommen eine ClassInfo, aber alles davor eben nicht.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: ClassInfo = nil ? o.O

  Alt 31. Aug 2006, 21:35
Wodurch wird das bestimmt? Compiler Magic? Oder gibt es dafür eine Direktive?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#7

Re: ClassInfo = nil ? o.O

  Alt 31. Aug 2006, 21:42
Durch published-Member.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: ClassInfo = nil ? o.O

  Alt 31. Aug 2006, 21:47
Delphi-Quellcode:
{$M+}

  TPersistent = class(TObject)
  [...]
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#9

Re: ClassInfo = nil ? o.O

  Alt 31. Aug 2006, 22:39
Zitat von 3_of_8:
Wodurch wird das bestimmt? Compiler Magic? Oder gibt es dafür eine Direktive?
Beides.
RTTI ist ein Relikt aus dem Compile run.
Im daran zu kommen gibt es zwei Lösungen. Wenn du volle "Gewalt" über den typen hast geht es einfach so wie es TPersistent macht:
Delphi-Quellcode:
{$M+}
  type blabla = class
  end;
{$M-}
Dadurch kannst ClassInfo benutzen.
Die andere Möglichkeit um an die Infos zu kommen ist die Funktion TypeInfo, die einen Pointer auf TTypeinfo liefert.
Damit kannst du ebenfalls GetPropList füttern.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
pertzschc

Registriert seit: 29. Jul 2005
Ort: Leipzig
309 Beiträge
 
Delphi 12 Athens
 
#10

Re: ClassInfo = nil ? o.O

  Alt 1. Sep 2006, 00:09
Kurze Frage: Wozu kann man das alles sinnvoll benutzen?

Gruß,
Christoph
  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 21:18 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