![]() |
AV bei Verwendung einer INI-File
Morgen.
Ich habe folgende Klassenfunktion, mit der ich die "ID" (ein von mir für jede meiner abgeleiteten Klassen vergebener Wert) aus einer INI-Datei auslese:
Delphi-Quellcode:
Allerdings bekomme ich eine AV in der ntdll.dll.
class function TModule.GetModuleID: Cardinal;
var ini: TIniFile; begin ini:=TIniFile.Create(ModuleConfigFile); try Result:=strtoint(ini.ReadString(ClassName,'ID','0')); finally ini.free; end; end; Was könnte das bedeuten? Außerhalb dieser Klassenfunktion kann ich ohne Probleme aus der Datei lesen. |
Re: AV bei Verwendung einer INI-File
Zwei Fragen:
1.) Ist ModuleConfigFile ein Funktionsaufruf oder eine Variable? Falls es ein Funktionsaufruf ist, würde ich in der Funktion mal suchen. 2.) Warum benutzt du nicht ReadInteger statt ReadString? Gruß Hawkeye |
Re: AV bei Verwendung einer INI-File
Zitat:
|
Re: AV bei Verwendung einer INI-File
@DevilsCamp
Das war auch mein erster Gedanke. Abers selbst wenn die Variable leer ist oder ein unzulässiger Pfad drin steht, funktioniert der Zugriff auf die (nicht vorhandene) INI-Datei. Delphi liefert in diesem Fall einfach den angegebenen Defaultwert. Ich hatte eigentlich auch mit einer Exception gerechnet. :? Gruß Hawkeye |
Re: AV bei Verwendung einer INI-File
hast Recht..
@3_of_8: Hast du die AV immer oder nur bei einem bestimmten File? |
Re: AV bei Verwendung einer INI-File
Wie rufst du denn die Methode auf? Ich hab so das Gefühl, dass er bei ClassName knallt. Also prüfe, ob du eine gültige Klasse beim Aufruf benutzt.
|
Re: AV bei Verwendung einer INI-File
Zitat:
|
Re: AV bei Verwendung einer INI-File
Zitat:
Soviel kann man schon sagen, wenn man weiß, welche Parameter ReadString von TIniFile erwartet |
Re: AV bei Verwendung einer INI-File
Ich habe gerade versucht ClassName in einer class Procedure zu verwenden. Das funktioniert.
Bleibt diese ModuleConfigFile noch. Ist das vielleicht ein Property der Klasse? |
Re: AV bei Verwendung einer INI-File
Zitat:
Delphi-Quellcode:
könnte zu einer AV führe, da er ja keine gültige Klasse bekommen hat.
type
TMyClass = class of TModule; var MyClass: TMyClass; begin MyClass:=nil; ShowMessage(IntToStr(MyClass.GetModuleID)); end; Und deshalb meine Bitte. Zeig mal den Aufruf der Funktion. Eventuell übergibts du ja nil als Objekt/Klasse. p.S: Hab schon mitbekommen, dass es eine Klassenfunktion ist, aber trotzdem kann man mit dem obigen Konstrukt eine Übergabe von nil erreichen und das dürfte dann in einer AV in Classname verursachen, wenn dort keine prüfungen auf nil drin sind. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 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