![]() |
Exception der Adresse C0000005 und 00403057
Liste der Anhänge anzeigen (Anzahl: 4)
Hallo, :-D
ich habe ein fatales Problem. Sobald ich mein Programm starte, kommen drei Fehlermeldungen (siehe Anhang). Ich habe meinen Code nach dem Prinzip von ![]()
Delphi-Quellcode:
Es wird angemängelt, dass irgendetwas mit Application.Run sei und meiner Abfrage des Zahlencodes.
if Copy(PList[0],1,10)='0123456789' then
begin // Anweisungen... end; Könnt ihr mir helfen? Ich finde nirgends etwas dazu. Johannes |
Re: Exception der Adresse C0000005 und 00403057
Erstmal: das Programm aus dem verlinktem Beitrag funktioniert so überhaupt nicht.
Hast du PList überhaupt erstellt und gibt es auch mindestens 5 Zeilen in deiner StringList? |
Re: Exception der Adresse C0000005 und 00403057
warte..hier ist mein code: es ist der anfang eines simulierten Systems:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, jpeg, ExtCtrls, MPlayer, StdCtrls, Mask; type TPForm = class(TForm) PMain: TImage; Laden1: TAnimate; Laden2: TAnimate; PasswortInfo: TLabel; PW2: TMaskEdit; PW1: TMaskEdit; PWOK: TButton; User: TLabel; Starttext: TLabel; RCode1: TEdit; RCode2: TEdit; RCode3: TEdit; RCodeOk: TButton; Soundbar: TMediaPlayer; sys: TTimer; DatumTimer: TTimer; procedure sysTimer(Sender: TObject); procedure DatumTimerTimer(Sender: TObject); procedure UserClick(Sender: TObject); procedure PWOKClick(Sender: TObject); procedure RCodeOkClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure PMainMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure UserMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private-Deklarationen } public { Public-Deklarationen } end; var PForm: TPForm; Zeile,Spalte,Lange,Cursor:Integer; PList:TStringList; Datzeit:String; implementation {$R *.DFM} procedure TPForm.sysTimer(Sender: TObject); begin if Laden1.Visible=TRUE then begin Laden1.Hide; Laden2.Hide; PMain.Picture:=nil; PForm.Cursor:=crDefault; Starttext.Show; User.show; end; end; procedure TPForm.DatumTimerTimer(Sender: TObject); begin Datzeit:=TimeToStr(Time)+' '+DateToStr(Date); end; procedure TPForm.UserClick(Sender: TObject); begin // Main Part: Login ----------------------------------------------------------- // PMain.Picture:=res.UserBG.Picture; PForm.Color:=clwhite; User.Hide; // Überprüfung von Daten und Beschädigungen----------------------------------- if Copy(PList[0],1,10)='0123456789' then begin PList.Append('Cofiguring...'); PList.Append('Setting...'); PList.Append(' '); end else begin // Wenn Abfrage falsch dann... halt; end; if Copy(PList[3],1,19)<>'[REGISTERED]=[TRUE]' then begin Starttext.Caption:='Bitte geben Sie den Registriercode ein:'; RCode1.Show; RCode2.Show; RCode3.Show; RCodeOk.show; end else begin Starttext.hide; RCode1.Hide; RCode2.Hide; RCode3.Hide; RCodeOk.Hide; end; // Beenden von Überprüfung ------------------------------------------------- end; procedure TPForm.PWOKClick(Sender: TObject); begin if (PW1.Text=PW2.Text) and (not (PW1.Text='')) then begin PW1.Hide; PW2.Hide; PasswortInfo.Hide; PList.Delete(4); PList.Append(PW1.Text); PList.SaveToFile('Pegasus.txt'); if FileExists('Pegasus.dll') then DeleteFile('Pegasus.dll'); RenameFile('Pegasus.txt','Pegasus.dll'); PList.Free; end; end; procedure TPForm.RCodeOkClick(Sender: TObject); begin if (RCode1.Text='1201') and (RCode2.Text='1996') and (RCode3.Text='1705') then begin // Registrierung vollzeihen ------------------------------------------------- PList.Delete(3); PList.Append('[REGISTERED]=[TRUE]'); // Passwortauswahlfeld sichtbar machen -------------------------------------- PW1.Show; PW2.show; PasswortInfo.Show; PWOK.Show; // Registrierung ausschalten ------------------------------------------------ Starttext.hide; RCode1.Hide; RCode2.Hide; RCode3.Hide; RCodeOk.Hide; end else begin with Soundbar do begin FileName:='Error.wav'; Open; EndPos:=TrackLength[2] div 2; Play; PList.Append('ERROR: '+Datzeit); end; end; end; procedure TPForm.FormCreate(Sender: TObject); const crTest1=1; // aus externer .CUR-Datei begin // Überprüfen von Dateivohandenkeit bzw erstellen ------------------------ PList.Create; if FileExists('Pegasus.txt') then PList.LoadFromFile('Pegasus.txt'); PList.Append('0123456789'); // Erstellprozedur beenden ----------------------------------------------- Cursor:=0; Screen.Cursors[crTest1]:=LoadCursorFromFile(PChar('none.cur')); Cursor:=crTest1; Laden1.Cursor:=crTest1; Laden2.Cursor:=crTest1; end; procedure TPForm.PMainMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin User.Font.Color:=clsilver; User.Font.Style:=[fsBold,fsUnderline]; end; procedure TPForm.UserMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin User.Font.Color:=clwhite; User.Font.Style:=[fsBold]; end; end. |
Re: Exception der Adresse C0000005 und 00403057
Mal wieder der alte Fehler.
Delphi-Quellcode:
Möglicherweise sind noch mehr drin, aber ich habe nicht weiter geschaut.
PList := TStringlist.Create;
|
Re: Exception der Adresse C0000005 und 00403057
Zitat:
Delphi-Quellcode:
und vergiß nicht PList im OnDestroy der Form wieder freizugeben ( PList.Free; ), wenn du sie schon im OnCreate erstellst.
PList := TStringList.Create;
PS: dann macht es sich besser die Variablen in den Private-Abschnitt der Form zu legen und nicht als globale Variablen |
Re: Exception der Adresse C0000005 und 00403057
Danke....wasstegarnicht, dass von der einen Zeile alles abhängt.
Hat funktioniert. Aber warum muss man die Variablen in Privatabschnitten deklarieren und nicht global? |
Re: Exception der Adresse C0000005 und 00403057
Muß man nicht, aber es ist besser.
Der Grundsatz lautet einfach nur: Definiere alles so nah wie möglich an der Stelle/Ebene, wo es benötigt wird. Und da hier vieles innerhalb verschiedener Funktionen der Klasse benötigt wird, macht es sich hier gut, wenn es auch innerhalb der Klasse definiert ist. So passiert es seltener, daß mal Variablen mit dem gleichen Namen sich überschneiden und man ausversehn auf was falsches zugreift, weil z.B. rein zufällig etwas Gleichnamiges später definiert wurde. PS: was deinen Schutz angeht ...
Delphi-Quellcode:
da ändert man 3 Byte in deiner EXE und macht aus = ein <> oder man schaut einfach in die EXE rein, denn die Strings (mit deinen Zahlen) stehen als Klartext darin und man kann die leicht abschreiben.
if (RCode1.Text='1201') and (RCode2.Text='1996') and (RCode3.Text='1705') then
|
Re: Exception der Adresse C0000005 und 00403057
Zitat:
99,9% Richtig = 100% Falsch |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 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