![]() |
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? |
Re: AV bei Verwendung einer INI-File
Zitat:
Damit würdest du eine Instanz der in dem Tag enthaltene Class Of TModule Ableitung der Class of bekommen.
Delphi-Quellcode:
bzw. Wenn Module vom Typ Class of TModule ist, dann erzeugst damit eine Instanz:
module := TModuleClass(Pointer((Sender as TComponent).Tag)).Create;
Delphi-Quellcode:
Instanz := Module.Create;
|
Re: AV bei Verwendung einer INI-File
Zitat:
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:
liefert immer "TModuleClass" zurueck, schliesslich castest du auf TModuleClass. Ich verstehe deine Art zu programmieren irgendwie ueberhaupt nicht :gruebel:
TModuleClass(Pointer(ModuleButtons[I].Tag)).ClassName
Greetz alcaeus |
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. |
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. |
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:
und mal
TModuleClass(Pointer(ModuleButtons[I])).ClassName
Delphi-Quellcode:
Jetzt wo ich länger drüber nachdenke, gehe ich mal stark davon aus das du überall noch das .Tag ergänzen musst ;)
TModuleClass(Pointer(ModuleButtons[I].Tag)).ClassName
|
Re: AV bei Verwendung einer INI-File
Zitat:
Delphi-Quellcode:
Ansonsten schließe ich mich jim_raynor an, in diesen Fragen wird wohl der Knackpunkt liegen.
i := Integer(TMouse);
ShowMessage(TClass(i).ClassName); |
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. |
Re: AV bei Verwendung einer INI-File
Und alle Tags sind wirklich ungleich null?
|
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: ![]() mfG mirage228 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 Uhr. |
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