Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi AV bei Verwendung einer INI-File (https://www.delphipraxis.net/68188-av-bei-verwendung-einer-ini-file.html)

Muetze1 26. Apr 2006 12:13

Re: AV bei Verwendung einer INI-File
 
Mal castest du ModuleButtons[I].Tag, mal ModuleButtons[I] auf einen Pointer und dann auch TModuleClass - was denn nun?

Und von was für einem Typ ist das Array ModuleButtons?

/EDIT: Vermutlich wird der komische TypeCast von Tag (der wohl 0 ist) auf einen Pointer ein Nil Pointer der zum Nil TModuleClass wird. Also nochmal: Warum überhaupt so komisches Konstrukt? Warum die Typensicherheit so über Board werfen?

Muetze1 26. Apr 2006 12:19

Re: AV bei Verwendung einer INI-File
 
Zitat:

Zitat von 3_of_8
Später lese ich das wieder aus und erzeuge eine Instanz:

module:=TModuleClass(Pointer((Sender as TComponent).Tag));

Damit erzeugst du keine Instanz.

Damit würdest du eine Instanz der in dem Tag enthaltene Class Of TModule Ableitung der Class of bekommen.
Delphi-Quellcode:
module := TModuleClass(Pointer((Sender as TComponent).Tag)).Create;
bzw. Wenn Module vom Typ Class of TModule ist, dann erzeugst damit eine Instanz:

Delphi-Quellcode:
 Instanz := Module.Create;

alcaeus 26. Apr 2006 12:37

Re: AV bei Verwendung einer INI-File
 
Zitat:

Zitat von 3_of_8
Also. Ich habe KEINE Variable namens ClassName. Ich will diese statische Methode haben.

Ich will auch...die Deklaration der Klasse sehn.
Wenn die Klasse naemlich von TObject abgeleitet ist (was sie immer ist), dann hast du zwar keine Variable namens ClassName, dafuer aber eine Funktion ClassName() von TObject. Allerdings gibt mir die Funktion auch bei einer class function den Klassennamen zurueck.

Was willst du denn eigentlich tun/erreichen?
Und warum castest du ModuleButtons[i] auf Pointer, dann auf TModuleClass, anstatt direkt ein Objekt von TModuleClass abzuspeichern? :gruebel: Irgendwie ist das krass konfus....
BTW, dieser Aufruf:
Delphi-Quellcode:
TModuleClass(Pointer(ModuleButtons[I].Tag)).ClassName
liefert immer "TModuleClass" zurueck, schliesslich castest du auf TModuleClass. Ich verstehe deine Art zu programmieren irgendwie ueberhaupt nicht :gruebel:

Greetz
alcaeus

3_of_8 26. Apr 2006 13:54

Re: AV bei Verwendung einer INI-File
 
TModuleClass ist eine Class of TModule. Wenn ich dann eine Instanz davon erzeute, erzeuge ich eine Instanz eines abgeleiteten Typs von TModule. Ich will einfach beim Klick auf einen SpeedButton die damit verbundene Klasse instantiieren. Das ganze soll dynamisch und leicht erweiterbar sein.

Das funktioniert auch prima, bis darauf, dass ich in der class function GetModuleID keine INI-Datei verwenden kann. Das ist mein Problem.

Wenn ich wüsste, was die ntdll.dll macht, wäre es evtl. auch einfacher.

Und die Deklaration der Klasse steht nebenbei in meinem ersten Beitrag.

Ich will mit ClassName den Namen der Klasse, so wie ihn ClassName() zurückgibt.

Muetze1 26. Apr 2006 14:03

Re: AV bei Verwendung einer INI-File
 
Ich zweifle an, dass man eine Metaklasse in einen Tag verbannen kann, da diese keine Instanzen haben sondern eine Typinformation sind. Kann man wirklich eine Ableitung von TModule als Klasse in einem Tag unterbringen? Die Elemente von TModuleClass sind doch keine Instanzen und somit keine Zeiger, daher die Frage ob man sie wirklich in einem Tag ablegen kann.

Ich glaube das das grundlegende Problem nicht in der GetModuleID liegt, sondern in dem Aufruf bzw. dem drumherum.

jim_raynor 26. Apr 2006 14:07

Re: AV bei Verwendung einer INI-File
 
Die ntdll.dll ist der Kernel von Windows! Wenns da knallt, dann liegst nicht an der DLL selbst ...

Also versuchen wir es nochmal.

1. Wie ist ModuleButtons definiert? Wenn es als Array of TModuleClass definiert ist, dann kannst du das ganze gecaste sparen. Wenn nicht, frage ich mich ernsthaft warum nicht!

2. Wo und wie wird ModuleButtons gefüllt?

3. Ist es wirklich sehr sehr sehr verwunderlich, dass du mal:

Delphi-Quellcode:
TModuleClass(Pointer(ModuleButtons[I])).ClassName
und mal

Delphi-Quellcode:
TModuleClass(Pointer(ModuleButtons[I].Tag)).ClassName
Jetzt wo ich länger drüber nachdenke, gehe ich mal stark davon aus das du überall noch das .Tag ergänzen musst ;)

Khabarakh 26. Apr 2006 14:11

Re: AV bei Verwendung einer INI-File
 
Zitat:

Zitat von Muetze1
Ich zweifle an, dass man eine Metaklasse in einen Tag verbannen kann, da diese keine Instanzen haben sondern eine Typinformation sind.

Und diese Typinformation hat einen eindeutigen Ort im Arbeitsspeicher, also ist das, was 3_of_8 da veranstaltet, eigentlich problemlos möglich.
Delphi-Quellcode:
i := Integer(TMouse);
  ShowMessage(TClass(i).ClassName);
Ansonsten schließe ich mich jim_raynor an, in diesen Fragen wird wohl der Knackpunkt liegen.

3_of_8 26. Apr 2006 17:35

Re: AV bei Verwendung einer INI-File
 
Ich sage es nochmal: das ganze funktioniert wunderbar, bis auf das INI-File, wobei irgendwas mit ClassName() nicht hinhaut.

Das .Tag habe ich nur hier vergessen, in meinem Code stimmt das UND ES FUNKTIONIERT AUCH.

ModuleButtons ist ein array of TSpeedButton.

Khabarakh 26. Apr 2006 17:45

Re: AV bei Verwendung einer INI-File
 
Und alle Tags sind wirklich ungleich null?

mirage228 26. Apr 2006 18:04

Re: AV bei Verwendung einer INI-File
 
Hi,

Ich hatte den selber mit INIs auch mal. Du darfst für den ersten Parameter auf gar keinen Fall einen Leerstring (oder einen string der nur aus Leerzeichen besteht) zurückgeben, sonst knallts in der ntdll.dll (zumindest unter XP)!

Siehe: http://qc.borland.com/wc/qcmain.aspx?d=9487

mfG
mirage228


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz