Autor Beitrag
the finger
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 18.03.04 17:28 
Hallo Leute,

hab folgendes Problem. Beim Starten meiner Anwendung erscheint bei mir jedes mal die Fehlermeldung:
Im Projekt XXX.exe ist eine Exception der Klasse EAccessViolation aufgetreten.
Meldung: 'Zugriffsverletzng bei Adresse 7788C7A4' in Modul 'ntdll.dll'. Schreiben von der Adresse 0040F35'. Prozess wurde angehalten......

Der Fehler erscheint immer an folgender Stelle:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
program XXX;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  ukategorie in 'ukategorie.pas' {Kategorie: TFrame},
  uInterbase in 'uInterbase.pas' {Interbase: TFrame},
  uParadox in 'uParadox.pas' {Paradox: TFrame},
  uUebergofy in 'uUebergofy.pas' {Uebergofy: TFrame},
  uHilfe in 'uHilfe.pas' {Hilfe: TFrame},
  uUpdate in 'uUpdate.pas' {Update: TFrame},
  uanfang in 'uanfang.pas' {Form2},
  sysutils,
  ubericht in 'ubericht.pas' {bericht: TFrame};

{$R *.res}

begin
  Application.Initialize;
  if paramcount=0 then
  begin
  Form2:=Tform2.Create(Application);
  Form2.Show;
  Form2.Update;
  sleep(3000);
  end;
    Application.CreateForm(TForm1, Form1);   <-- an dieser Stelle erscheint die Fehlermeldung
  if paramcount=0 then
  begin
    Form2.destroy;
    Application.Run;
  end;
end.


Hab schon überall nach ner Lösung gesucht aber keine gefunden.
Kann mit jemand helfen???

Moderiert von user profile iconMotzi: Code- durch Delphi-Tags ersetzt.
Brainiac
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 18.03.04 17:51 
Die AccessViolations werden leider meist nicht wirklich genau angezeigt. Der Fehler tritt vermutlich irgendwo während des Erstellens der Form oder enthaltener Komponenten auf.

Kannst du mal beschreiben, was du mit den Zeilen direkt davor bezweckst, also von 'if paramcount=0 then'?
the finger Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 18.03.04 17:59 
die anwendung kann auch auf dos ebene gestartet werden ohne graphische oberfläche.
dann muss sie allerdings mit einem parameter aufgerufen werde, der danach an eine
funktion übergeben wird.
From2 ist lediglich ein kleines Startfenster, das bei graphischer benutzung beim start kurz
erscheint und dann wieder verschwindet.

hab den ganzen Kram auch schon weggelassen, weil ich gedacht habe es könnte damit
zusammenhängen.

Dann stand da nur noch
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


Die Fehlermeldung erscheint dann aber trotzdem noch.

Moderiert von user profile iconMotzi: Code- durch Delphi-Tags ersetzt.
Brainiac
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 18.03.04 18:13 
Ja wie gesagt, dann hat warscheinlich irgendeine Komponente von Form1 während ihrer Erstellung Probleme mit einem Parameter oder so.
Wenn du eigene Komponenten benutzt dann setz doch mal bei CreateForm einen Haltepunkt und folge dem Programm schritt für schritt.
Wenn du Assembler lesen kannst, dann kannst du auch direkt das CPUWindow aufrufen und da mitlesen.
the finger Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 22.03.04 11:44 
Hab den Haltepunkt mal an das Createform gesetzt. Die Fehlermeldung erscheint genau an dieser Stelle noch bevor ich SChritt für schritt unit 1 gehen kann.
Loryn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34

Win 98, ME
D4 Stand.
BeitragVerfasst: Di 23.03.04 23:42 
Hallo,

the finger hat folgendes geschrieben:


hab folgendes Problem. Beim Starten meiner Anwendung erscheint bei mir jedes mal die Fehlermeldung:
Im Projekt XXX.exe ist eine Exception der Klasse EAccessViolation aufgetreten.
Meldung: 'Zugriffsverletzng bei Adresse 7788C7A4' in Modul 'ntdll.dll'. Schreiben von der Adresse 0040F35'. Prozess wurde angehalten......



Der Zugriffsfehler passiert im Modul ntdll.dll. Was hat das Programm mit dieser DLL zu tun? Eine Suche in dieser Richtung könnte weiterhelfen.

Gruß Loryn
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 24.03.04 02:07 
Zeige mal den Code, den Du im OnCreate-Ereignis stehen hast.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
the finger Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 24.03.04 09:50 
Titel: oncreate methode
hier der code der formcreate methode:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
procedure TForm1.FormCreate(Sender: TObject);
var
  Ini: TIniFile;
begin
  cmd:=true;
  directory:=getcurrentdir;
  update1.Visible:=true;
  Interbase1.Visible:=false;
  Paradox1.Visible:=false;
  Uebergofy1.Visible:=false;
  kategorie1.Visible:=false;
  hilfe2.Visible:=false;
  bericht1.Visible:=false;
  veraendert:=false;
  Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
  try
    server        := Ini.ReadString( 'Verbindung''server' ,
                                      'XXXXXXXXXX' );
    port          := Ini.ReadInteger( 'Verbindung''port', XXXX);
    verzeichnis   := Ini.ReadString( 'Verbindung''verzeichnis',
                                     XXXXXXXX);
    datenbank1    := Ini.ReadString( 'Verbindung''datenbank1','XXXXXXX');
    datenbank2    := Ini.readString( 'Verbindung''datenbank2','XXXXXXX');
    kategorie     := Ini.readString( 'Kategorie' , 'name' , 'Minitouren');
    alledaten     := Ini.ReadBool( 'KompletterDatenbestand' , 'alle' , false);
    if ini.readinteger('Neuinstallation','true',1)=1 then
       install();
    Ini.Free;
  except
    Ini.Free;
  end;
  update1.MaskEdit1.Text:=kategorie;
  if paramcount > 0 then
  begin
    cmd:=false;
    if uppercase(paramstr(1))='\ALLEKATEGORIEN' then
      kategorie:='Alle Kategorien';
    if uppercase(paramstr(1))='\MINITOUREN' then
      kategorie:='Minitouren';
    if uppercase(paramstr(1))='\FAHRZEUGE' then
      kategorie:='Fahrzeuge';
    if uppercase(paramstr(1))='\HOTELS' then
      kategorie:='Hotels';
    if uppercase(paramstr(1))='\SONSTIGES' then
      kategorie:='Sonstiges';
    if uppercase(paramstr(1))='\ZUGBUS' then
      kategorie:='ZugBus';
    if uppercase(paramstr(1))='\PAUSCHALREISEN' then
      kategorie:='Pauschalreisen';
    if uppercase(paramstr(1))='\FLUEGE' then
      kategorie:='Fluege';
    form1.Visible:=false;
    try
      update1.Button1.Click();
    except
    end;
     exit;
    end;
end;


wenn das programm über ein dosshell gestartet wird mit einem parameter dahinter dann läuft es ohne benutzeroberfläche.
danke für jede hilfe!

Moderiert von user profile iconMotzi: Code- durch Delphi-Tags ersetzt
Loryn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34

Win 98, ME
D4 Stand.
BeitragVerfasst: Mi 24.03.04 10:59 
Da die Zugriffsverletzung in ntdll.dll auftritt, vermute ich, dass der Fehler bei der Zuweisung von server oder port passiert. Sind das properties? Was geschieht, wenn server oder port einen Wert zugewiesen bekommen?
the finger Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 24.03.04 12:32 
server und port sind globale variablen. diesen werden zunächst aus einer ini datei die entsprechenden werte übergeben. erst später werden die wert der globalen variablen an die jeweiligen interbase objekte übergeben. dies geschieht nicht beim programmstart.
Loryn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34

Win 98, ME
D4 Stand.
BeitragVerfasst: Mi 24.03.04 13:06 
Ok, der Fehler muss vorher passieren. Bei welcher Anweisung genau tritt der Fehler auf?

Setze einen Breakpoint auf die Zeile
Application.Initialize;
und führe das Programm in Einzelschritten (F7) durch.

Was passiert, wenn
Application.CreateForm(TForm1, Form1);
durch diese Anweisung ersetzt wird:
Form1 := TForm1.Create(Application);

Gruß Loryn
the finger Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 24.03.04 15:34 
hab Application.CreateForm(TForm1, Form1); durch Form1 := TForm1.Create(Application); ersetzt. dadurch startet aber die anwendung nicht richitg. das hauptformular wird nicht angezeigt.

wenn ich schrittweise durchgehe, erscheint die fehlermeldung genau an der stelle Application.CreateForm(TForm1, Form1);.

wenn ich die methode oncreate von form1 weglasse. erscheint die fehlermeldung trotzdem
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: Mi 24.03.04 16:31 
::the finger

Ich glaube, die Lösung des Problems liegt hier:
Zitat:
die anwendung kann auch auf dos ebene gestartet werden ohne graphische oberfläche.


Hast du das Projekt jetzt als Console-Anwendung oder als GUI-Anwendung angelegt ?
Weil wenn du ersteres verwendet hast, dann funkt das Anlegen einer Form wahrscheinlich nicht - das würde auch die mysteriöse AV erklären !

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.