| |
|
|
 Michael Wodrich | Ich führe die Diskussion mal hier fort, da unter XProfan 10 ja nur Wünsche geäussert werden sollen: [quote:3bf23b0aa6=Michael Wodrich] Ich wünsche mir die Erweiterung der Objekte auf LongInt-Zuweisung. Da es das TypeOf() schon gibt müßte ja intern bei der Long-Variable stehen, daß sie vom Typ Object ist.
Mir gelingt es nämlich mit den Array-Objekten nicht, diese zu verketten.
Beispiel: class SingleListElem = Next&, Werte#(20),SingleListElem@ class SingleList = Head&,Methoden@,...
Ein Element dem Head& zuweisen scheitert schon. Weitere Elemente über das Next& verfolgen geht auch nicht, solange man ein Objekt nicht an einen LongInt zuweisen kann. Das Lesen und Speichern der geänderten Werte kann über Methoden gelöst werden. Wenn XProfan hier eine interne Zugriffsprüfung spendiert wird à la Diese Operation mit Objekt so nicht möglich sollte es doch gehen...
Schöne Grüße Michael Wodrich[/quote:3bf23b0aa6] [quote:3bf23b0aa6=RGH]IBei der LongInt-Variablen steht intern gar nichts. Und auch ein LongInt im Bereich(Objekt/Struktur) belegt exakt vier Bytes, Das TypeOf funktioniert nur bei Bereichsvariablen. Bei einer Zuweisung eines Objektes an ein Longint (was ja bei einfachen Bereichen und Strukturen funktioniert) gingen alle Informationen über das Objekt außer seiner Adresse verloren. Was wollte man damit noch anfangen?
Aber ließe sich Dein Problem nicht lösen, in dem Du eine Methode Head@ schreibst, der Du als Parameter ein Objekt der Klasse SingleListElem übergibst.
Gruß Roland[/quote:3bf23b0aa6] Mein Problem ist eigentlich, daß ein Element der Liste ja ein Objekt ist und mit NEXT& einen Zeiger auf das nächste Objekt enthält. So kann man sich durch die (notfalls endlose) Liste der Objekte hangeln.
SingleListNode sind also dynamische Objekte der Liste und SingleList hat nur den Zeiger auf das zuerst erzeugte Objekt in HEAD& zu stehen.
Es gibt zwar die Möglichkeit der Zuweisung an Arrays aber leider sind die ja nicht dynamisch. Eine Liste und ein Array sind halt 2 Paar Schuhe. 
Schöne Grüße Michael Wodrich
P.S: Ich hatte schon versucht, mit GlobalAlloc und Co. zu tricksen, aber Objekte haben nun einmal ihre eigenen Gesetzmäßigkeiten (Ã la wie verzaubert man einen global allozierten Speicherbereich, in den ein Objekt hineinkopiert wird wieder in ein funktionierendes Objekt) |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 22.02.2006 ▲ |
|
|
|
|
 Michael Wodrich | Ich weiß ja leider nicht, wie die Objekte intern erstellt werden. Aber vielleicht ist sowas möglich wie:
NewObjectPtr( Ptr&, Klasse [,Parameter] )
Obj# = ActivateObject( Ptr& )
DisposeObjectPtr( Ptr & )
Dann können die Speicherbereiche dynamisch erstellt werden, werden von XProfan mittels NewObjectPtr vergattert und mit DisposeObjectPtr wieder entzaubert.
Der Zugriff auf diese Pointer wäre dann mit ActivateObject möglich.
Das reservieren und freigeben des Speichers steuert man dann selbst. So müssten sich beliebig viele Objekte realisieren lassen.
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 24.02.2006 ▲ |
|
|
|
|
 RGH | Hallo Michael,
zunächst versuche ich zu ergründen, was genau Du da programmieren willst. Sehe ich es richtig, daß Du eine verkettete Liste gleichartiger Objekte (= Objekte einer Klasse) erstellen möchtest? Ein Objekt sollte wissen, welches sein Vorgänger und welches sein Nachgfolger ist?
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 24.02.2006 ▲ |
|
|
|
|
 Michael Wodrich | 
Bei den Nodes wäre es natürlich gut, wenn auch artfremde Objekte gesammelt werden könnten.
Ich stelle mir da vor, daß z.B. in einem Grafikprogramm Objekte unterschiedlichster Art (aber evtl. mit gleichem Vorfahr) in einer Liste gesammelt werden können.
Erster Ansatz war die einfach verkettete Liste, dann sollte die doppelt verkettete kommen und da die zirkuläre auf der doppelt verketteten aufbaut, sollte hier Vererbung genutzt werden.
Das alles soll also irgendwann in einem Container für Objekte enden. Und die Anzahl der möglichen Objekte ist unbestimmt (deshalb der Schrei nach Dynamik).
Schöne Grüße Michael Wodrich |
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 24.02.2006 ▲ |
|
|
|
|
 RGH | [quote:0828590cc7=Michael Wodrich]P.S: Ich hatte schon versucht, <...> zu tricksen[/quote:0828590cc7] Der Ansatzpunkt ist nicht schlecht (Anfänger bitte nicht mitlesen. Was jetzt kommt:widerspricht jeglicher Kapselung von Objekten ;) ):
Mit @Addr läßt sich die Adresse eines Objektes ermitteln und mit @SizeOf dessen Größe. Nun dimensionieren wir eine Bereichsvariable in passender Größe und weisen dieser die Adresse des Objektes zu ... und schwupp: wir haben eine normale Bereichsvariable, die den gleichen Speicher belegt, wie das Objekt. Den Schweinereien sind nun Tür und Tor geöffnet! Kurz: Die Adresse einen Objektes (den Pointer) haben wir also. (Ursprünglich wollte ich auch den Versuch der Ermittlung einer Objektadresse verbieten, aber dann wollte ich doch für die Profis ein Hintertürchen offen lassen.) Man könnte nun also auf die verwegene Idee kommen, mit MoveMemory (Windows-API) das Objekt in dynamische Speicherbereiche zu kopieren ... und das so oft, so weit der Speicher reicht und diese Kopien könnten natürlich verkettet sein. Dazu braucht es ja nur die jeweiligen Adressen in den Eigenschafte Next& und Prev& des Objektes. Und wenn man nun eines der Objekte aus der Liste lesen will, kopiert man es mit MoveMemory wieder an die Adresse unseres Objektes. (Dazu braucht man nicht einmal die erwähnte Bereichsvariable. Die eröffnet aber weitere Möglichkeiten.)
Kurz: Es sollte also möglich sein, ähnlich wie die Stringliste, eine Objektliste zu kreieren. Am Besten natürlich auch in einer Klasse.
Das habe ich jetzt zwar nur so ins Blaue gesponnen, aber vielleicht hilft es Dir weiter. (Und vielleicht juckt es mich auch, das Ganze selbst in eine Klasse zu gießen, die ich dann natürlich im Forum veröffentliche.)
Gruß Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 24.02.2006 ▲ |
|
|
|