AGB  ·  Datenschutz  ·  Impressum  







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

eigenen Pointer unterbringen in TObject?

Ein Thema von stoxx · begonnen am 17. Feb 2009 · letzter Beitrag vom 17. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#1

eigenen Pointer unterbringen in TObject?

  Alt 17. Feb 2009, 17:50
Hallo Profis,

gibts eine Möglichkeit, in der VMT oder so, für jedes TObject noch einen eigenen Pointer zu platzieren und unterzubekommen?
Ab TComponent gäbe es die Tag Property.
Gibt es vielleicht noch eine vesteckte Möglichkeit und freier Platz in TObject? vielleicht für unwichtige Features?

Eher nicht, oder?

 ShowMessage(InttoStr (obj.InstanceSize )); zeigt 4 Byte an, finde aber keine deklarierte Variable in den Sourcen von TObject

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: eigenen Pointer unterbringen in TObject?

  Alt 17. Feb 2009, 17:53
Kannst du keinen Nachfahr erstellen, der die neue Property hat?
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#3

Re: eigenen Pointer unterbringen in TObject?

  Alt 17. Feb 2009, 17:55
naja, darum gings ja jetzt nicht. eine TStringrid kann man halt nicht mehr von diesem eigenem Typ ableiten ...
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: eigenen Pointer unterbringen in TObject?

  Alt 17. Feb 2009, 17:56
Die VMT ist eine Tabelle für jede Klasse. Nicht für jedes Objekt. Jedes Objekt hat einen Zeiger auf die VMT seiner Klasse (damit arbeiten dann auch as und is); das sind genau die 4 Byte einer TObject-Instanz.

Um ein Feld nachträglich unterzubringen, musst du extern eine Tabelle (z.B. Hashmap) verwalten, die für jede Objektinstanz das Feld hält. Einen anderen Weg gibt es leider nicht. Dummerweise gibt es in Delphi keine Garbage Collection, weshalb das Freigeben des Platzes in der Tabelle schwierig ist. Am besten hookst du dazu TObject.FreeInstance, dort kannst du dann aufräumen.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#5

Re: eigenen Pointer unterbringen in TObject?

  Alt 17. Feb 2009, 17:58
ok, gut .. danke Dir. Wollte nur wissen, ob eine zusätzliche Tabelle, in welcher Form auch immer, vermeidbar wäre ...
Danke Dir da ..
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: eigenen Pointer unterbringen in TObject?

  Alt 17. Feb 2009, 17:59
Zitat von stoxx:
ShowMessage(InttoStr (obj.InstanceSize ));
zeigt 4 Byte an, finde aber keine deklarierte Variable in den Sourcen von TObject
Das ist der Zeiger zur VMT.

Ansonsten verstehe ich nicht, was du vorhast. Wenn du in einem Stringgrid noch einen weiteren Pointer unterbingen wills, dann leite doch davon ab.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#7

Re: eigenen Pointer unterbringen in TObject?

  Alt 17. Feb 2009, 18:03
Naja du kannst ja auch Objekte oder Records in die Tags (also die jeweilige Tag-Property) schreiben, darin kannst Du mehrere Pointer oder was auch immer packen. Dürfteste die sauberste Lösung sein...

Viele Grüße
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#8

Re: eigenen Pointer unterbringen in TObject?

  Alt 17. Feb 2009, 18:06
@ Sirius

es gänge darum, Funktionalität zu einem beliebigen Object hinzuzufügen. Eine Art Mehrfachvererbung zu realisieren.
Mehrfachvererbung bräuchte man ja meist nur zur Erweiterung von Objectfunktionalitäten.
Reine Funktionerweiterungen lassen sich mit dem Class Helpern super realisieren, wenn man jetzt aber noch eigene Daten unterbringen möchte, müsste man wirklich eine zweite Tabelle führen.

bräuchte es für dies hier ...

http://www.delphipraxis.net/internal...148&highlight=

@Apollonius


wie geht das mit dem Hooken von TObject.FreeInstance. Code hast Du nicht zufällig gleich parat, oder?
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: eigenen Pointer unterbringen in TObject?

  Alt 17. Feb 2009, 18:16
Ich denke, es ist einfacher, einen eigenen Speichermanager zu installieren und dann in FreeMem das Objekt aus der Tabelle zu nehmen. Dazu holst du dir mit GetMemoryManager(Ex) (das hängt von der Delphi-Version ab) den alten Speichermanager, ersetzt im Record den FreeMem-Zeiger und setzt das dann als neuen Speichermanager. In deinem eigenen FreeMem löschst du gegebenenfalls den Tabelleneintrag und rufst das alte FreeMem auf.

Das Hooken von TObject.FreeInstance mag zwar geringfügig schneller sein (da du beispielsweise nur Objekt-Freigaben mitbekommst und keine Feld-Wald-und-Wiesen-FreeMems), allerdings ist es auch erheblich unsauberer.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#10

Re: eigenen Pointer unterbringen in TObject?

  Alt 17. Feb 2009, 18:26
Ich muss gestehen, dass der Hook auf FreeInstance mir besser gefällt ...

hab da was gefunden, bin mir aber nicht sicher, ob das das richtige ist?

http://www.kbasm.com/delphi-per-class-allocator.html
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  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 05:37 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