AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Für mich unerklärliche Access Violation
Thema durchsuchen
Ansicht
Themen-Optionen

Für mich unerklärliche Access Violation

Ein Thema von Borschti · begonnen am 11. Jan 2010 · letzter Beitrag vom 12. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2      
Borschti

Registriert seit: 1. Nov 2007
Ort: Marburg Lahn
235 Beiträge
 
Delphi 2007 Professional
 
#1

Für mich unerklärliche Access Violation

  Alt 11. Jan 2010, 14:15
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:
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] = 'Truethen
        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;
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.
Delphi-Quellcode:
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;
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:

Delphi-Quellcode:
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;
lg Alex
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Für mich unerklärliche Access Violation

  Alt 11. Jan 2010, 15:52
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
Frank Reim
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Für mich unerklärliche Access Violation

  Alt 11. Jan 2010, 15:54
Schau doch mal im Debugger, in welcher Zeile der Fehler auftritt
Markus Kinzler
  Mit Zitat antworten Zitat
Borschti

Registriert seit: 1. Nov 2007
Ort: Marburg Lahn
235 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Für mich unerklärliche Access Violation

  Alt 11. Jan 2010, 16:20
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
  Mit Zitat antworten Zitat
Borschti

Registriert seit: 1. Nov 2007
Ort: Marburg Lahn
235 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Für mich unerklärliche Access Violation

  Alt 11. Jan 2010, 16:25
@Dataspider: Daran lag es leider nicht, gibt es denn noch andere vorschläge?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#6

Re: Für mich unerklärliche Access Violation

  Alt 11. Jan 2010, 16:26
Die Variable regSettings ist innerhalb der Methode lokal und wird nicht initialisiert. Verwunderlich ist also eigentlich wenn kein Fehler auftaucht!
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Für mich unerklärliche Access Violation

  Alt 11. Jan 2010, 16:27
Glaub ich Dir:
Zitat:
Delphi-Quellcode:
var
  e: Integer;
  test : String;
begin
  e := ShellExecute(Handle, NIL,
                    PCHAR(ExtractFilePath(Application.ExeName) + fileName + '.bat'),
                    PCHAR(''), NIL, SW_SHOW); //Hier die Fehlermeldung
Wenn Du jetzt noch Handle "ordentlich" definierst, sollte es klappen

Zitat:
hwnd

Specifies a parent window. This window receives any message boxes that an application produces. For example, an application may report an error by producing a message box.
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Für mich unerklärliche Access Violation

  Alt 11. Jan 2010, 16:29
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 von p80286:
Glaub ich Dir:
Zitat:
Delphi-Quellcode:
var
  e: Integer;
  test : String;
begin
  e := ShellExecute(Handle, NIL,
                    PCHAR(ExtractFilePath(Application.ExeName) + fileName + '.bat'),
                    PCHAR(''), NIL, SW_SHOW); //Hier die Fehlermeldung
Wenn Du jetzt noch Handle "ordentlich" definierst, sollte es klappen
Was ist daran auszusetzen? Da es sich um eine Methode der Form handelt, handelt es sich um [/i]Handle[i] um das Handle des Formulares.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Für mich unerklärliche Access Violation

  Alt 11. Jan 2010, 16:31
Ok, übersehen!
Omnia mea Culpa

K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#10

Re: Für mich unerklärliche Access Violation

  Alt 11. Jan 2010, 16:37
Zitat von Luckie:
Überprüfe mal im Debugger, ob auch alle Objekte instantiiert werden.
Dazu braucht's aber keinen Debugger - das sieht man auch so, das regSettings (das Formular) nicht instanziiert wird.
Uwe Raabe
  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 04:49 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