Autor |
Beitrag |
the finger
Hält's aus hier
Beiträge: 6
|
Verfasst: 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:
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' , ukategorie in 'ukategorie.pas' , uInterbase in 'uInterbase.pas' , uParadox in 'uParadox.pas' , uUebergofy in 'uUebergofy.pas' , uHilfe in 'uHilfe.pas' , uUpdate in 'uUpdate.pas' , uanfang in 'uanfang.pas' , sysutils, ubericht in 'ubericht.pas' ;
{$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 Motzi: Code- durch Delphi-Tags ersetzt.
|
|
Brainiac
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
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 Motzi: Code- durch Delphi-Tags ersetzt.
|
|
Brainiac
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 34
Win 98, ME
D4 Stand.
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mi 24.03.04 09:50
Titel: oncreate methode
hier der code der formcreate methode:
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 Motzi: Code- durch Delphi-Tags ersetzt
|
|
Loryn
      
Beiträge: 34
Win 98, ME
D4 Stand.
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 34
Win 98, ME
D4 Stand.
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 679
Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
|
Verfasst: 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.
|
|