Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Exception der Adresse C0000005 und 00403057 (https://www.delphipraxis.net/135424-exception-der-adresse-c0000005-und-00403057-a.html)

Johannes013 10. Jun 2009 16:02


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 Dateien gemacht. Die Abfrage ist:

Delphi-Quellcode:
if Copy(PList[0],1,10)='0123456789' then
   begin
// Anweisungen...
   end;
Es wird angemängelt, dass irgendetwas mit Application.Run sei und meiner Abfrage des Zahlencodes.
Könnt ihr mir helfen? Ich finde nirgends etwas dazu.


Johannes

himitsu 10. Jun 2009 16:06

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?

Johannes013 10. Jun 2009 16:08

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.

DeddyH 10. Jun 2009 16:10

Re: Exception der Adresse C0000005 und 00403057
 
Mal wieder der alte Fehler.
Delphi-Quellcode:
PList := TStringlist.Create;
Möglicherweise sind noch mehr drin, aber ich habe nicht weiter geschaut.

himitsu 10. Jun 2009 16:14

Re: Exception der Adresse C0000005 und 00403057
 
Zitat:

Delphi-Quellcode:
PList.Create;

eine Instanz einer Klasse erstellt man so:
Delphi-Quellcode:
PList := TStringList.Create;
und vergiß nicht PList im OnDestroy der Form wieder freizugeben ( PList.Free; ), wenn du sie schon im OnCreate erstellst.

PS: dann macht es sich besser die Variablen in den Private-Abschnitt der Form zu legen und nicht als globale Variablen

Johannes013 10. Jun 2009 16:17

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?

himitsu 10. Jun 2009 16:21

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:
if (RCode1.Text='1201') and (RCode2.Text='1996') and (RCode3.Text='1705') then
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.

Satty67 10. Jun 2009 16:25

Re: Exception der Adresse C0000005 und 00403057
 
Zitat:

Zitat von Johannes013
Danke....wasstegarnicht, dass von der einen Zeile alles abhängt.

Beim Programmieren gilt
99,9% Richtig = 100% Falsch


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 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