![]() |
Für mich unerklärliche Access Violation
Hallo,
wie der Titel schon sagt erhalte ich in meinem Programm eine für mich nicht nachvollziehbare Access Violation. Also ich habe mehrere Klassen und Formulare in meinem Projekt, es sind aber nur 2 Klassen mit Formularen an der Access Violation beteiligt. Hier mal ein paar Codeschnippsel:
Delphi-Quellcode:
Hier sind nun meine prozeduren CreateRegFile die ich zuvor aufgerufen habe und die prozedur ExecRegFile die gleich mit aufgerufen wird. Bei der Funktion ShellExecute in der prozedur ExecRegFile bekomme ich nun die Fehlermeldung:'Im Projekt PrOutlookImport.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Accessvioaltion at adress 004671F in module 'PrOutlookImport.exe'. Read of adress 000001B4' aufgetreten.
procedure TFmOutlookImport.FormActivate(Sender: TObject);
var slSetLog : TStringList; SettingLog : TSettingLog; regSettings : TFmSettings; i : Integer; begin if {ParamStr(1) = '\b'} true then begin SettingLog := TSettingLog.Create; slSetLog := SettingLog.OpenSettingLog(ExtractFilePath(Application.ExeName) + 'standSets.csv');//ParamStr(2)); FmSettings.edtSets.Text := SlSetLog[0]; FmSettings.edtExcelFilePath.Text := slSetLog[1]; FmSettings.edtOutlookFilePath.Text := slSetLog[2]; if slSetLog[3] = 'True' then begin FmSettings.edtOutlookBackupPath.Text := slSetLog[4]; end else begin FmSettings.edtOutlookBackupPath.Text := 'Sicherung wird nicht erstellt.'; FmSettings.checkSichShow.Checked := False; end; FmSettings.edtOutlookForm.Text := slSetLog[5]; if slSetLog.Count >= 7 then begin FmSettings.edtEmailBetreff.Text := slSetLog[6]; if slSetLog.Count >= 8 then begin FmSettings.lbEmailCCs.Clear; for i := 7 to slSetLog.Count - 1 do begin FmSettings.lbEmailCCs.Items.Append(slSetLog[i]); end; end; end; regSettings.SetOutlookVerNr(FOutlookVerNr); regSettings.CreateRegFile(FmSettings.edtOutlookForm.Text+ '_' +IntToStr(FoutlookVerNr)); //Hier wird die Prozedur CreateRegFile die sich in der klasse TFmSettings befindet aufgerufen und hier kommt später auch die Fehlermeldung. //Merkwürdig finde ich nur das ich vorher auch auf eine prozedur dieser Klasse zugreife, also SetOutlookVerNr dort aber keine Fehlermeldung bekomme. slSetLog.Destroy; SettingLog.Destroy; OutlookPro := TOutlookPro.Create(Self); OutlookPro.KontaktSchreiben(StatusBar); OutlookPro.Destroy; Close;
Delphi-Quellcode:
Woran kann das liegen? Ich habe schon probiert das erzeugen des Formulars FmSettings im Projekt Quellcode vor das erzeugen des Formulars FmOutlookImport zu setzen, daran lag es aber nicht, wäre auch unlogisch da ja die prozedur SetOutlookVerNr auch ohne Probleme aufgerufen werden kann. Auch die schreibweise der durch ShellExecute aufzurufenden Datei ist vollkommen richtig. Ich weiß nicht woran es sonst noch liegen könnte. Wenn ich diese ganzen Schritte über einen Buttonklick ausführen lasse funktioniert alles wunderbar wie man hier sehen kann:
procedure TFmSettings.CreateRegFile(fileName : String);
var slBatFile : TStringlist; begin slBatFile := TStringList.Create; slBatFile.Add('regedit /s ' + fileName + '.reg'); slBatFile.SaveToFile(ExtractFilePath(Application.ExeName) + fileName + '.bat'); slBatFile.Destroy; ExecRegFile(fileName); end; procedure TFmSettings.ExecRegFile(fileName : String); var e: Integer; test : String; begin e := ShellExecute(Handle, NIL, PCHAR(ExtractFilePath(Application.ExeName) + fileName + '.bat'), PCHAR(''), NIL, SW_SHOW); //Hier die Fehlermeldung if (e<=32) then begin ShowMessage('Fehler: Batch-Datei konnte nicht ausgeführt werden!') end end;
Delphi-Quellcode:
lg Alex
procedure TFmOutlookImport.Importierenstarten1Click(Sender: TObject);
var OutlookPro : TOutlookPro; regSettings : TFmSettings; outlookVerNr : Integer; begin OutlookPro := TOutlookPro.Create(Self); regSettings.CreateRegFile(FmSettings.edtOutlookForm.Text+ '_' +IntToStr(FoutlookVerNr)); OutlookPro.KontaktSchreiben(StatusBar); OutlookPro.Destroy; Close; end; |
Re: Für mich unerklärliche Access Violation
Hi,
ich weiß zwar nicht, ob es das Problem ist. Aber mir fällt spontan auf, dass du alle Objekt durch Aufruf des Destructors freizugeben versuchst. Das würde ich erst mal ändern. (also Free anstatt Destoy) Frank |
Re: Für mich unerklärliche Access Violation
Schau doch mal im Debugger, in welcher Zeile der Fehler auftritt
|
Re: Für mich unerklärliche Access Violation
Hi,
also der Fehler tritt beim Ausführen von ShellExecute in der procedure ExecRegFile auf, habe ich auch auskommentiert. @Dataspider: Das werde ich mal ausprobieren, danke :) |
Re: Für mich unerklärliche Access Violation
@Dataspider: Daran lag es leider nicht, gibt es denn noch andere vorschläge? :(
|
Re: Für mich unerklärliche Access Violation
Die Variable regSettings ist innerhalb der Methode lokal und wird nicht initialisiert. Verwunderlich ist also eigentlich wenn kein Fehler auftaucht!
|
Re: Für mich unerklärliche Access Violation
Glaub ich Dir:
Zitat:
Zitat:
K-H |
Re: Für mich unerklärliche Access Violation
Also ShellExecute kannst du schon mal ausschließen, das wirft keine Exception. Wahrscheinlich tritt der Fehler in dem Aufruf davor aus. Überprüfe mal im Debugger, ob auch alle Objekte instantiiert werden.
Zitat:
|
Re: Für mich unerklärliche Access Violation
Ok, übersehen!
Omnia mea Culpa K-H |
Re: Für mich unerklärliche Access Violation
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 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 by Thomas Breitkreuz