AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wert aus Klasse nicht verfügbar

Ein Thema von Ruio · begonnen am 22. Dez 2009 · letzter Beitrag vom 24. Dez 2009
Antwort Antwort
Seite 1 von 2  1 2      
Ruio

Registriert seit: 6. Nov 2008
89 Beiträge
 
Delphi 2005 Personal
 
#1

Wert aus Klasse nicht verfügbar

  Alt 22. Dez 2009, 14:40
Ich logge in meinem Programm vieles.
Nun gibts es bei an einer Bestimmten Stelle ein Problem damit.
Stelle:
Delphi-Quellcode:
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;
Der Debugger zeigt eine AV bei dem hier an:
Delphi-Quellcode:
if (Loglevel<=FErrorLogLevel) then
  ErrorLogWrite(LogFlag, Msg);
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.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#2

Re: Wert aus Klasse nicht verfügbar

  Alt 22. Dez 2009, 14:42
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
Frederic Kerber
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Wert aus Klasse nicht verfügbar

  Alt 22. Dez 2009, 15:14
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.
  Mit Zitat antworten Zitat
Ruio

Registriert seit: 6. Nov 2008
89 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Wert aus Klasse nicht verfügbar

  Alt 22. Dez 2009, 15:43
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;
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Wert aus Klasse nicht verfügbar

  Alt 22. Dez 2009, 15:53
Zitat von Ruio:
Delphi-Quellcode:
procedure Tt4rCore.ReceiveAppMessage(var Msg: TWMCopyData);
var
  sText: array[0..999999] of Char; // <= !!!
Willst du wirklich annähernd 1 MB vom Stack verwenden?
(das kann zu Stackoverflow führen)
Du solltest sText besser dynamisch reservieren.
fork me on Github
  Mit Zitat antworten Zitat
hugo1990

Registriert seit: 27. Dez 2006
166 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Wert aus Klasse nicht verfügbar

  Alt 22. Dez 2009, 15:59
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Wert aus Klasse nicht verfügbar

  Alt 22. Dez 2009, 16:00
Zeig mal die Erzeugung des Objektes
Markus Kinzler
  Mit Zitat antworten Zitat
Ruio

Registriert seit: 6. Nov 2008
89 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Wert aus Klasse nicht verfügbar

  Alt 22. Dez 2009, 16:37
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;
  Mit Zitat antworten Zitat
Ruio

Registriert seit: 6. Nov 2008
89 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Wert aus Klasse nicht verfügbar

  Alt 23. Dez 2009, 11:55
Problem gelöst, ich hatte alles im OnCreate, aber da kam scheinbar eine Message zu früh an und deshalb gabs die AV.
  Mit Zitat antworten Zitat
Ruio

Registriert seit: 6. Nov 2008
89 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Wert aus Klasse nicht verfügbar

  Alt 23. Dez 2009, 16:19
Der Fehler ist wohl doch nicht da:
Delphi-Quellcode:
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;
Und zu array[0..999999] of Char;
Ein Dynamisches Array ging da nicht und weil ich nocht weiß wie viel da mal versendet wird ist das erstmal 999999 groß.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz