Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehler wenn exe größer ist als 1mb (https://www.delphipraxis.net/117170-fehler-wenn-exe-groesser-ist-als-1mb.html)

marius0702 13. Jul 2008 13:46


Fehler wenn exe größer ist als 1mb
 
Hi
ich habe das Problem, dass mein Programm seit gestern leider die Größe von 1MB überschritten hat und es seitdem jedesmal wenn ich ein Nebenform aufrufe (Form2.show;) eine Fehlermeldung (Zugriffsverletzung bei Adresse 0045A6B8 in Modul 'project1.exe'. Lesen von Adresse 00000070.) erzeugt.

Ich hab schon in der DP und in Google gesucht aber nichts zu diesem Problem gefunden. :(

Relicted 13. Jul 2008 13:47

Re: Fehler wenn exe größer ist als 1mb
 
sind die nebenformulare initialisiert ? du solltest eh nicht mit globalen variablen arbeiten sondern eher "Tform2.create" benutzen :-)

gruß

mkinzler 13. Jul 2008 13:47

Re: Fehler wenn exe größer ist als 1mb
 
Wir wäre eine deratige Begrenzung unbekannt. Die bekannte liegt bei 2 GB

marius0702 13. Jul 2008 13:50

Re: Fehler wenn exe größer ist als 1mb
 
ich werde mal form2.create versuchen.
danke für die schnellen antworten.

hoika 13. Jul 2008 13:53

Re: Fehler wenn exe größer ist als 1mb
 
Hallo,

genauer lesen !

TForm2.Create nicht Form2.Create;

Ausserdem würde ich mal aussagekräftige Namen verwenden.


Heiko

Relicted 13. Jul 2008 13:55

Re: Fehler wenn exe größer ist als 1mb
 
oder nochmal detaillierter: anstatt form2.show solltest du vielleicht (auch wenns teilweise verpöhnt ist) es so tun:

Delphi-Quellcode:
with TForm2.Create do
begin
  try
    showmodal;
  finally
    free;
  end;
end;
oder ähnlich.. jenachdem wie du es brauchst.

SirThornberry 13. Jul 2008 13:59

Re: Fehler wenn exe größer ist als 1mb
 
Die Adressen der Zugriffsverletzung sagen ziemlich eindeutig aus das da ein Zugriff auf eine Objectinstanz stattfindet welche nil ist, also nicht initialisiert. Das der Fehler erst jetzt in Erscheinung tritt kann mit der Größe zu tun haben und zwar weil sich mit Umfang des Programmes ja auch bestimmte Bereiche verschieben.
Wenn der Speichermanager zum Beispiel immer 200Kb Blöcke vom System anfordert kann es sein das du einfach bisher daneben gegriffen hast aber es noch auf den vom Speichermanager reservierten Bereich zugegriffen hat. Durch Verschieben von Adressen etc. beim hinzufügen neuer Dinge hat das Glück jetzt wohl jemanden verlassen :-)

marius0702 13. Jul 2008 14:01

Re: Fehler wenn exe größer ist als 1mb
 
aber warum tritt das problem erst auf wenn die Anwendung größer ist als 1MB?

marius0702 13. Jul 2008 14:03

Re: Fehler wenn exe größer ist als 1mb
 
aso jetzt hab ichs verstanden.

Muetze1 13. Jul 2008 15:30

Re: Fehler wenn exe größer ist als 1mb
 
Moin!

Wir erstellen mit D4 wie auch bis D2007 Delphi EXE'n mit einer Grösse von 180 MB ohne Probleme. Eine 1 MB Grenze gibt es somit definitiv nicht.

MfG
Muetze1

Die Muhkuh 13. Jul 2008 15:42

Re: Fehler wenn exe größer ist als 1mb
 
180MB? :shock:

Was stopft ihr da alles rein?

Muetze1 13. Jul 2008 16:22

Re: Fehler wenn exe größer ist als 1mb
 
Moin!

Bis zu 400 vollgestopfte Formulare mit entsprechend vielen Komponenten, grafischen Elementen etc? Es ist ein kommerzielles Projekt und das auslagern und extern laden von manchen Resourcen bringt im Endeffekt mehr Aufwand und weniger Ersparnis. Auch wird es dann schwieriger bestimmte Arbeiten auszulagern an andere (nicht eingearbeitete) Kräfte.

MfG
Muetze1

Relicted 13. Jul 2008 16:33

Re: Fehler wenn exe größer ist als 1mb
 
muetze: autsch! :-)
und ich dachte ne 25MB exe wär schon oversized ^^

marius0702 13. Jul 2008 16:59

Re: Fehler wenn exe größer ist als 1mb
 
es geht immernoch nicht.
ich hab jetzt

with TForm2.Create(self) do
begin
try
showmodal;
finally
free;
end;

probiert aber es geht nicht.
es kommt die fehlermeldung undefinierter bezeichner tform2.
bei den globalen variablen hab ich Form2:tform stehen. ka ob das so stimmt.
ich hab auch schon Form2:tform2 probiert.aber da kommt die gleiche fehlermeldung nur schon am anfang.

marius0702 13. Jul 2008 17:03

Re: Fehler wenn exe größer ist als 1mb
 
jetzt hab ich die variablen weg gemacht und es statet aber es kommen die selben fehlermeldungen wie am Anfang. (zugriffsverletzung...)

rotfc 13. Jul 2008 17:06

Re: Fehler wenn exe größer ist als 1mb
 
Zitat:

Zitat von Muetze1
Moin!

Wir erstellen mit D4 wie auch bis D2007 Delphi EXE'n mit einer Grösse von 180 MB ohne Probleme. Eine 1 MB Grenze gibt es somit definitiv nicht.

MfG
Muetze1

So ein paar 1:1 pixelgetreu eingescannte Klappposter aus den einschlägigen Herrenmagazinen brauchen nun mal ein wenig Platz zur Entfaltung in seriösen EDV-Umgebungen ;-)

Mal anders gefragt: Wenn ich Deine 180 MB-Echse auf einen nagelneuen XP/Vista-Rechner starte:
Was macht Deine Echse dann aus den 180 MB?

Was legt sie ("aus sich selbst heraus") auf dem nagelneuen PC an?

Oder sind von den 180 MB 160 MB nur akustische/visuelle Hilfe?

Wollt' ja nur interessenhalber mal nachgefragt haben :oops:

marius0702 13. Jul 2008 17:09

Re: Fehler wenn exe größer ist als 1mb
 
Delphi-Quellcode:
//...
uses Unit2, unit3, Unit4, unit5, Unit6, Unit7, Unit9;
//...

procedure TForm1.Button7Click(Sender: TObject);
begin
with TForm2.Create(self) do
begin
  try
    showmodal;
  finally
    free;
  end;
end;
end;
//...
end.
villeicht hilft euch das weiter.

marius0702 13. Jul 2008 17:17

Re: Fehler wenn exe größer ist als 1mb
 
aaaaaaaaaaaaaaaaaaahhhhhhhhhhhhhhhhh ich hab das problem gefunden. Danke für die hilfe.

haentschman 13. Jul 2008 17:24

Re: Fehler wenn exe größer ist als 1mb
 
Zitat:

ich hab das problem gefunden.
...und :gruebel:

marius0702 13. Jul 2008 17:38

Re: Fehler wenn exe größer ist als 1mb
 
ich hab jetzt leider noch ein problem. form2.edit1.text:=form1.edit1.text geht jetzt nicht(zugriffsverletzung...). und wenn ich in form2 form1.create... mache startet form1 2 mal.

mkinzler 13. Jul 2008 17:41

Re: Fehler wenn exe größer ist als 1mb
 
Du musst u.U. die Unit der Form1 der Unit von Form2 bekannt machen.
Aber dir scheinen hier etwas die theoretischen Grundlagen zu fehlen

marius0702 13. Jul 2008 17:44

Re: Fehler wenn exe größer ist als 1mb
 
ich hab mir das selber beigebracht :(
ein beispiel quelltext wäre gut :roll:

mkinzler 13. Jul 2008 17:46

Re: Fehler wenn exe größer ist als 1mb
 
http://www.delphi-treff.de/tutorials/grundlagen/

marius0702 13. Jul 2008 17:53

Re: Fehler wenn exe größer ist als 1mb
 
in form2 steht ja auch schon
uses Unit1;
der fehler kommt trotzdem.

Christian Seehase 13. Jul 2008 17:54

Re: Fehler wenn exe größer ist als 1mb
 
Moin Marius,

Du benutzt aber Form2 in Unit1... ;-)

mkinzler 13. Jul 2008 17:54

Re: Fehler wenn exe größer ist als 1mb
 
Hast du in Unit2 auch eine Variable mit der Bezeichnung Form1?

marius0702 13. Jul 2008 18:42

Re: Fehler wenn exe größer ist als 1mb
 
die varable hab ich nicht deklariert weil es vor dem 1MB Problem ohne variable ging und wenn ich Form1:Tform1 hinschreibe kommt undefinierter bezeichner Tform1.


Ich Form2 in Unit1 nicht ich zeige es nur irgendwan an.
aber form1.edit1.text:=form2.edit1.text geht auch nicht.

mkinzler 13. Jul 2008 18:48

Re: Fehler wenn exe größer ist als 1mb
 
Zeig mal etwas Quellcode. Sonst sind alles nur Spekulationen

marius0702 13. Jul 2008 18:54

Re: Fehler wenn exe größer ist als 1mb
 
Delphi-Quellcode:
unit Unit1;

//...

var
  Form1: TForm1;

//...
uses Unit2, unit3, Unit4, unit5, Unit6, Unit7, Unit9;

//...
procedure TForm1.Button98Click(Sender: TObject);
begin
with TForm2.Create(self) do
begin
  try
    showmodal;
  finally
    free;
  end;
end;
end;
//...
Delphi-Quellcode:
unit Unit2;

//...

var
Form2: TForm2;

implementation

uses Unit1;

//...

procedure TForm2.FormShow(Sender: TObject);

begin
edit1.Text:=form1.edit12.Text;
//das geht nicht
end;

mkinzler 13. Jul 2008 18:56

Re: Fehler wenn exe größer ist als 1mb
 
Wie werden die Formulare erzeugt?

marius0702 13. Jul 2008 19:08

Re: Fehler wenn exe größer ist als 1mb
 
was meinst du damit? ich kompillier es halt ganz normal und die anderen formulare hab ich mit "neues formular" hinzugefügt. Tut mir leid wenn die antwort etwas dumm war. :( :( :(

Villeicht hilft dir das weiter
Delphi-Quellcode:

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3},
  Unit4 in 'Unit4.pas' {Form4},
  Unit5 in 'Unit5.pas' {Form5},
  Unit6 in 'Unit6.pas' {Form6},
  Unit7 in 'Unit7.pas' {Form7},
//  Unit8 in 'Unit8.pas' {Form8},
  Unit9 in 'Unit9.pas' {Form9};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm5, Form5);
  Application.CreateForm(TForm6, Form6);
  Application.CreateForm(TForm7, Form7);
 // Application.CreateForm(TForm8, Form8);
  Application.CreateForm(TForm9, Form9);
  Application.Run;
end.

mkinzler 13. Jul 2008 19:11

Re: Fehler wenn exe größer ist als 1mb
 
Form2 referenziert aber nicht die dynamisch erzeugte Instanz

haentschman 13. Jul 2008 19:13

Re: Fehler wenn exe größer ist als 1mb
 
du kannst Dir das Form2.Create schenken, da die Formulare schon automatisch erzeugt werden.

...um Form2 anzuzeigen reicht Form2.Show oder Form2.ShowModal

Die Zugriffsverletzungen kam beim Erzeugen eines Formulars mit gleichem Namen.

Nachtreiter 23. Jul 2008 02:18

Re: Fehler wenn exe größer ist als 1mb
 
Hallo marius0702

Delphi-Quellcode:
procedure TForm2.FormShow(Sender: TObject);

begin
edit1.Text:=form1.edit12.Text;
//das geht nicht
end;
Das ist richtig, das geht so nicht.
Du solltest Dir in TForm1 eine Funktion schreiben die den Inhalt
von form1.edit12.Text zurückgibt und im Public - Bereich steht, vieleicht
dabei testen ob der Inhalt gültig ist.

Dann solltest Du auch schreiben wann es nicht geht.
Beim Kompilieren?
Bei der Ausführung?

alzaimar 23. Jul 2008 05:31

Re: Fehler wenn exe größer ist als 1mb
 
Zitat:

Zitat von Nachtreiter
Das ist richtig, das geht so nicht.

Natürlich geht das, es ist nur nicht sonderlich schön. Deine Lösung ist jedoch auch nicht optimal, da ein Formular keine Daten bereitstellen sollte (wenn man denn so pingelig ist).

Ist das Problem mit der Zugriffsverletzung jetzt eigentlich gelöst?

Nachtreiter 23. Jul 2008 11:00

Re: Fehler wenn exe größer ist als 1mb
 
Delphi-Quellcode:
edit1.Text:=form1.edit12.Text;
Verstößt gegen die Regeln der OOP.
Stellen alle Copiler sicher das form1.edit12.Text initialisiert ist?
form1.edit12.Text ist ein Speicherplatz, wer initialisiert ihn?

@alzaimar Du kannst jetzt Dein Senf dazugeben.

alzaimar 23. Jul 2008 11:07

Re: Fehler wenn exe größer ist als 1mb
 
Zitat:

Zitat von Nachtreiter
@alzaimar Du kannst jetzt Dein Senf dazugeben.

Was soll das? Du theoretisierst, scheinbar ohne konkrete Kenntnisse von Delphi. Vielleicht solltest Du deine Antworten auf Dinge beschränken, von denen Du weisst, das die Antwort richtig ist, alles andere verwirrt.

Um es kurz zu machen: Delphi bzw. die Komponente TEdit initialisiert die Eigenschaft 'Text' automatisch.

Nachtreiter, ich möchte Dich bitten, deine Bemerkungen und Ausführungen auf das Thema zu beschränken. Wenn Du mir etwas zu sagen hast, dann schick mir eine PN. So machen das Erwachsene.

hoika 23. Jul 2008 11:27

Re: Fehler wenn exe größer ist als 1mb
 
Hallo,

Stellen alle Copiler sicher das form1.edit12.Text initialisiert ist?
ja

form1.edit12.Text
Speicherplatz ?

hm, falsch, ist ein property


Das einzige, was ich wirklich gelten lasse ;)

Stellen alle Copiler sicher das form1 initialisiert ist


Form1 wird vom Form-Designer erzeugt als global Variable
zum einfacheren Zugriff.

Das erste, was ich immer bei neuen Forms machen,
ist ebend diese Variable zu löschen.


Heiko


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