![]() |
Wert aus Klasse nicht verfügbar
Ich logge in meinem Programm vieles.
Nun gibts es bei an einer Bestimmten Stelle ein Problem damit. Stelle:
Delphi-Quellcode:
Der Debugger zeigt eine AV bei dem hier an:
procedure Tt4rCore.ReceiveAppMessage(var Msg: TWMCopyData);
var sText: array[0..999999] of Char; SenderAndAction,Action,Sender: String; begin SenderAndAction := '0000'+IntToStr(Msg.CopyDataStruct.dwData); Log(SenderAndAction,T4R_LOGLEVEL_INFOS); Action := Copy(SenderAndAction,Length(SenderAndAction)-3,2); Sender := Copy(SenderAndAction,0,Length(SenderAndAction)-3); StrLCopy(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData); ReceiveAppMessageCallback(Sender,Action, sText); end;
Delphi-Quellcode:
FErrorLogLevel wird am Anfang gleich festgelegt und sollte verfügbar sein. Beim weiteren Nachforschen habe ich festgestellt, dass der Debugger bei FErrorLogLevel WErt nicht verfügbar anzeigt.
if (Loglevel<=FErrorLogLevel) then
ErrorLogWrite(LogFlag, Msg); |
Re: Wert aus Klasse nicht verfügbar
Hi!
Kann es sein, dass die Stelle, wo du sagst, dass da ne AV kommt, nicht in dem Code-Abschnitt ist, den du obendrüber zeigst? Grüße, Frederic |
Re: Wert aus Klasse nicht verfügbar
Ich würde mal behaupten, ohne den kompletten Quellcode zu kennen, dass du einfach vergessen hast, das entsprechende Objekt (das Objekt welches FErrorLogLevel beinhaltet) zu erzeugen, bevor du drauf zu greifst.
|
Re: Wert aus Klasse nicht verfügbar
FErrorLogLevel gehört zu Tt4rCore.
Und der Rest zu dem Codeausschnitt:
Delphi-Quellcode:
procedure Tt4rCore.Log(Msg: String; Loglevel: Integer);
var LogFlag: String; begin LogFlag := T4R_FLAG_ERROR; case Loglevel of T4R_LOGLEVEL_ERRORS: LogFlag := T4R_FLAG_ERROR; T4R_LOGLEVEL_INFOS: LogFlag := T4R_FLAG_INFO; end; if (Loglevel<=FErrorLogLevel) then ErrorLogWrite(LogFlag, Msg); end; |
Re: Wert aus Klasse nicht verfügbar
Zitat:
(das kann zu Stackoverflow führen) Du solltest sText besser dynamisch reservieren. |
Re: Wert aus Klasse nicht verfügbar
Also wenn die Zugriffsverletzung wirklich an dieser Stelle auftrit, dann kann das Objekt einfach nicht richtig erzeugt worden sein. Da es sich ja bei FErrorLogLevel um nen Integer handelt und man bei nem Zugriff darauf sonst keine Zugriffsverletzung bekommt.
|
Re: Wert aus Klasse nicht verfügbar
Zeig mal die Erzeugung des Objektes
|
Re: Wert aus Klasse nicht verfügbar
Die Log-Funktion geht sonst aber, die AV wird nämlich geloggt.
Delphi-Quellcode:
constructor Tt4rCore.Create(AppName : String);
begin inherited Create; //... //Errorlog ForceDirectories(Ft4rAppDataPath+T4R_LOGFOLDER_NAME+'\'); FErrorLogFile := Ft4rAppDataPath+T4R_LOGFOLDER_NAME+'\'+FAppName+'.txt'; FErrorLogLevel := GetIniValue(T4R_INI_SECTION_MAIN, T4R_INI_SETTING_LOGLEVEL, T4R_INI_SETTING_LOGLEVEL_DEFAULT); FErrorLogActive := true; Application.OnException := AppException; end; procedure Tt4rCore.AppException(Sender: TObject; E: Exception); begin try if FErrorLogActive then ErrorLogWrite(T4R_FLAG_ERROR, '('+E.ClassName+') '+E.Message + ' (Error caused by ' + Sender.ClassName + ')'); finally Application.ShowException(E); end; end; |
Re: Wert aus Klasse nicht verfügbar
Problem gelöst, ich hatte alles im OnCreate, aber da kam scheinbar eine Message zu früh an und deshalb gabs die AV.
|
Re: Wert aus Klasse nicht verfügbar
Der Fehler ist wohl doch nicht da:
Delphi-Quellcode:
Und zu array[0..999999] of Char;
procedure Tt4rCore.ReceiveAppMessage(var Msg: TWMCopyData);
var sText: array[0..999999] of Char; SenderAndAction,Action,Sender: String; begin SenderAndAction := '0000'+IntToStr(Msg.CopyDataStruct.dwData); //Log(SenderAndAction,T4R_LOGLEVEL_INFOS); Action := Copy(SenderAndAction,Length(SenderAndAction)-3,2); Sender := Copy(SenderAndAction,0,Length(SenderAndAction)-3); StrLCopy(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData); ReceiveAppMessageCallback(Sender,Action, sText); //Hier wird die AV jetzt angezeigt end; Ein Dynamisches Array ging da nicht und weil ich nocht weiß wie viel da mal versendet wird ist das erstmal 999999 groß. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 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