![]() |
Problem mit Fehlermeldung
Hallo
Ich habe ein Problem mit einer Fehlermeldung die immer kommt wenn ich in meinem Programm diesen Formular öffne. Hir die Fehlermeldung: Zugriffsverletzung bei Adresse 00466A67 in Modul 'LPT_PORT_EIN_AUS_P_2.exe'. Lesen von Adresse 00000000. Hier ist der Quelltext von der "Ausdangsunit":
Delphi-Quellcode:
und hier der von dem Formular was herforgerufen werden soll:
unit LPT_PORT_NEU;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus; type TForm1 = class(TForm) GroupBox2: TGroupBox; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; MainMenu1: TMainMenu; Extras1: TMenuItem; Datenanzeigen1: TMenuItem; Direckteingabe1: TMenuItem; Aus1: TMenuItem; N2MRechts1: TMenuItem; Aus01: TMenuItem; Navigatioon1: TMenuItem; procedure Button2Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Alle1Click(Sender: TObject); procedure Keine1Click(Sender: TObject); procedure Datenanzeigen1Click(Sender: TObject); procedure Direckteingabe1Click(Sender: TObject); procedure Aus1Click(Sender: TObject); procedure N2MRechts1Click(Sender: TObject); procedure Aus01Click(Sender: TObject); procedure Navigatioon1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; BasAdr: Integer = $378; // ComHandle: THandle; gelesen: Integer; implementation uses LPT_PORT_NEU_3, LPT_PORT_NEU_P, TEST; // Test ist die Unit die herforgerufen werden soll {$R *.dfm} procedure Out32 ( Addresse: Integer; Wert: byte ); stdcall; export; external 'INPOUT32.DLL'; function Inp32 ( Addresse: Integer ): Byte; stdcall; export; external 'INPOUT32.DLL'; procedure TForm1.Button2Click(Sender: TObject); begin Out32 ( BasAdr, 1 + 4); end; procedure TForm1.Button6Click(Sender: TObject); begin Out32 ( BasAdr, 2 + 8); end; procedure TForm1.Button4Click(Sender: TObject); begin Out32 ( BasAdr, 1); end; procedure TForm1.Button5Click(Sender: TObject); begin Out32 ( BasAdr, 4); end; procedure TForm1.Button3Click(Sender: TObject); begin Out32 ( BasAdr, 0); end; procedure TForm1.Alle1Click(Sender: TObject); begin Out32 ( BasAdr, 255); end; procedure TForm1.Keine1Click(Sender: TObject); begin Out32 ( BasAdr, 0); end; procedure TForm1.Datenanzeigen1Click(Sender: TObject); begin Form2.ShowModal; end; procedure TForm1.Direckteingabe1Click(Sender: TObject); begin Form3.ShowModal; end; procedure TForm1.Aus1Click(Sender: TObject); begin Out32 ( BasAdr, 1 + 8); end; procedure TForm1.N2MRechts1Click(Sender: TObject); begin Out32 ( BasAdr, 2 + 4); end; procedure TForm1.Aus01Click(Sender: TObject); begin Out32 (BasAdr, 0); end; procedure TForm1.Navigatioon1Click(Sender: TObject); begin Form4.ShowModal; // Hier ist der Befehl der die Unit hervorrufen soll end; end.
Delphi-Quellcode:
Kann mir jemand helfen? :?: :?: :?:
unit TEST;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls; type TForm4 = class(TForm) Image1: TImage; Button1: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Label1: TLabel; procedure Button3Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form4: TForm4; BasAdr: Integer = $378; implementation {$R *.dfm} procedure Out32 ( Addresse: Integer; Wert: byte ); stdcall; export; external 'INPOUT32.DLL'; function Inp32 ( Addresse: Integer ): Byte; stdcall; export; external 'INPOUT32.DLL'; procedure TForm4.Button3Click(Sender: TObject); begin Out32 ( BasAdr, 1 + 4); sleep (1700); Out32 ( BasAdr, 2 + 4); sleep (480); Out32 ( BasAdr, 1 + 4); sleep (4000); Out32 (BasAdr, 0); end; procedure TForm4.Button1Click(Sender: TObject); begin Out32 ( BasAdr, 0); end; procedure TForm4.Button5Click(Sender: TObject); begin Out32 ( BasAdr, 1 + 4); sleep (5000); Out32 ( BasAdr, 0); end; procedure TForm4.Button4Click(Sender: TObject); begin Out32 ( BasAdr, 1 + 4); sleep (5000); Out32 ( BasAdr, 2 + 4); sleep (500); Out32 ( BasAdr, 1 + 4); sleep (3000); Out32 (BasAdr, 0); end; end. Ich hatte diesen Problem schon mal aber diesens Mal kann ich den Fehler vom letzten Mal nicht finden. :wall: Gruß Landfloh :pale: |
Re: Problem mit Fehlermeldung
Form4 wird schlicht und ergreifend nil sein weil es noch nicht erzeugt wurde. Am besten kommst du wenn du Form4 im FormCreate von Form1 erzeugst und Form4 eine membervariable von Form1 ist. Somit bekommst du keine Probleme wenn irgendwann mal die globale Variable umbenannt wurde (was ja automatisch beim benennen der Formularklasse passiert)
Könntest du dem Beitrag bitte einen aussagekräftigen Titel geben? :-) "Fehlermeldung" sagt so gut wie nichts aus und das es sich um ein problem handelt besagt bereits die Sparte in der du gepostet hast. |
Re: Problem mit Fehlermeldung
Das versteh ich noch nicht mit dem membervariable und mit dem Form1. :wiejetzt:
Kannst du es villeicht noch etwas genauer erklären? |
Re: Problem mit Fehlermeldung
Du hast mehrere Forms. Form1 bis FormX. Innerhalb von Form1 versuchst du Form4 anzuezeigen. Form4 wird aber nach Form1 erzeugt. Und anhand der Fehlermeldung vermute ich einfach mal das Form4 noch nicht erzeugt wurde zu dem Zeitpuntk wo du es anzeigen lassen willst.
|
Re: Problem mit Fehlermeldung
Zitat:
Delphi-Quellcode:
Dann zeigt er noch befor das Programm überhaupt läuft die Fehlermeldung an.
procedure TForm1.FormCreate(Sender: TObject);
begin Form4.Show; end; |
Re: Problem mit Fehlermeldung
Moin, Moin,
denke auch, dass Form4 noch nicht existiert. Da die Formulare aber offenbar alle erst nach Betätigunmg eines Buttons geöffnet werden (?!) ist m.E. die Reihenfolge der Erzeugung wohl nicht relevant - schau mal in den Projektoptionen nach, ob die Formulare auch alle automatisch erzeugt werden. Wenn dieses sicher gestellt ist, dürfte der Fehler eigentlich nicht mehr auftreten. |
Re: Problem mit Fehlermeldung
Ich habs jetzt schon geschafft ich hab einfach alles noch mal neu gemacht und jetzt fungtionirt es. :?: :?:
Ich finds super :lol: :witch: :dancer: :dancer2: :cheer: |
Re: Problem mit Fehlermeldung
Du solltest dich trotzdem mal an die Grundlagen machen
|
Re: Problem mit Fehlermeldung
Zitat:
|
Re: Problem mit Fehlermeldung
[OT] Geile Wortschöpfung, fast so schön wie "Partionieren, Formieren und Defragmieren" :mrgreen: [/OT]
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 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-2025 by Thomas Breitkreuz