AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Was ist falsch am Aufruf und Freigaben von Create

Was ist falsch am Aufruf und Freigaben von Create

Ein Thema von NoName1 · begonnen am 4. Feb 2020 · letzter Beitrag vom 6. Feb 2020
Antwort Antwort
Seite 1 von 2  1 2   
NoName1

Registriert seit: 8. Mär 2018
143 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Was ist falsch am Aufruf und Freigaben von Create

  Alt 4. Feb 2020, 19:35
Delphi-Version: 10.2 Tokyo
Guten Tag Entwickler,
ich bin angefangen mich mit Modulen zu beschäftigen.
Im Programm habe ich für die Hilfe zu den einzelnen Formularen, es sind 27 Formulare, ein Modul "ModulHilfe" erstellt.
Weil das Modul in jedem Formular benötigt wird, lasse ich es automatisch beim Programmstart mit erzeugen:
Delphi-Quellcode:
ModulHilfe in 'DatenModule\ModulHilfe.pas{MoHilfe: TDataModule};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TdtmdMain, dtmdMain);
  Application.CreateForm(TMoEMail, MoEMail);
  ... und noch Anderes
  
   Application.Run;
end.
Im Modul TMOHilfe steht folgendes im public

Delphi-Quellcode:
public
    { Public-Deklarationen }
    constructor Create;
    procedure Hilfe(aNutzerID: Int64; aPrgTeil, aHauptSeite, aUnterseite: SmallInt);
  end;
und im Create-Ereignis folgendes:
Delphi-Quellcode:
constructor TMoHilfe.Create;
begin
  GlobalPfad := TAppConstants.GetGlobalPath;
  PfadHandBuch := TAppConstants.GetHandBuchPfad;
end;

In den Formularen wird die Hilfe in der Unit-Klausel so angegeben:
Delphi-Quellcode:
implementation
uses
  DatenModulMain,
  ModulSonstigeDrucke,
  ModulHilfe,
 ....

und im OnCreate-Ereignis des Formulares so erzeugt:
MoHilfe.Create;
Im Destroy-Ereignis wird es so freigegeben:
MoHilfe.Free;

Die Hilfe wird dann im Formular so aufgerufen:
MoHilfe.Hilfe(NutzerID, 17, 0, 0);
Das Problem ist nun folgendes:
Beim ersten Aufruf des Formulares kann ich die Hilfe aufrufen.
Wenn ich aber das Formular schliesse und danach erneut aufrufe, wird sofort eine
Zugriffsverletzung bei Adresse 0100D47D in Modul 'Loge.exe'. Schreiben von Adresse 000000A0.
geworfen.

Wenn ich aber das "MoHilfe.Free" im Formular nicht setze, dann kann ich das Formular ohne Absturz
immer wieder aufrufen.

Was mache ich falsch? Wo liegt mein Gedankenfehler?

Sollte diese Frage hier nicht in die Kategorie passen, so bitte ich den Admin sie in die richtige zu verschieben.

Vielen Dank im Voraus für Eure evtl. Hilfe.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.451 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Was ist falsch am Aufruf und Freigaben von Create

  Alt 4. Feb 2020, 19:46
Delphi-Quellcode:

MoHilfe.Create;

Das geht so nicht! So muss das lauten:
Delphi-Quellcode:

MoHilfe := TMoHilfe.Create;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.400 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Was ist falsch am Aufruf und Freigaben von Create

  Alt 4. Feb 2020, 22:26
Und wo ist die Variable MoHilfe deklariert?



Zitat:
und im OnCreate-Ereignis des Formulares so erzeugt
Wie auch bei Formularen muß nicht alles "dauehaft" sofort erzeugt werden und dann die meiste Zeit (wenn nicht sogar fast immer) sinnlos im Hintergrund rumgammeln.

Man kann sowas auch erst dann erstellen, wenn es benötigt wird und anschließend wieder freigeben


Gerade die Hilfe wird von Usern ja praktisch niemals benutzt. (Erfahrung vieler Entwickler)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.286 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Was ist falsch am Aufruf und Freigaben von Create

  Alt 4. Feb 2020, 22:28
Guten Tag Entwickler,
ich bin angefangen mich mit Modulen zu beschäftigen.
Im Programm habe ich für die Hilfe zu den einzelnen Formularen, es sind 27 Formulare, ein Modul "ModulHilfe" erstellt.
Weil das Modul in jedem Formular benötigt wird, lasse ich es automatisch beim Programmstart mit erzeugen:
Delphi-Quellcode:
ModulHilfe in 'DatenModule\ModulHilfe.pas{MoHilfe: TDataModule};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TdtmdMain, dtmdMain);
  Application.CreateForm(TMoEMail, MoEMail);
  ... und noch Anderes
  
   Application.Run;
end.
wenn Du das automatisch beim Programmstart erzeugen lässt, dann musst Du das weder später im Verlauf nochmal erzeugen noch freigeben - dafür ist dann die Anwendung verantwortlich...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Was ist falsch am Aufruf und Freigaben von Create

  Alt 4. Feb 2020, 22:37
Ergänzend zu Lemmy: Ein Aufrufen der Methode Show vom Formular reicht dann.

Aber du hast doch selbst geschrieben, dass du es von der Anwendung automatisch erzeugen lässt. Warum erzeugst du es doch noch mal selbst? Mal ganz davon abgesehen, dass, so wie du es machst, es falsch ist. Und dann gibst du es frei und wunderst dich, dass ein erneuter Aufruf zu einem Fehler führt?
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie ( 4. Feb 2020 um 22:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.658 Beiträge
 
Delphi 7 Personal
 
#6

AW: Was ist falsch am Aufruf und Freigaben von Create

  Alt 5. Feb 2020, 08:34
Wahrscheinlich ist ihm der Unterschied zwischen .Close und .Hide nicht bekannt.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
NoName1

Registriert seit: 8. Mär 2018
143 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Was ist falsch am Aufruf und Freigaben von Create

  Alt 5. Feb 2020, 08:35
Danke an allen die mit geantwortet haben.
Nun habe ich etwas dazu gelernt.
Ich habe das Create und das Free aus dem Formular herausgenommen und siehe da es funktioniert.

Einen schönen Tag an alle Entwickler
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.583 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Was ist falsch am Aufruf und Freigaben von Create

  Alt 5. Feb 2020, 08:40
.. wenn Du es denn doch noch dynamisch erstellen willst..
Delphi-Quellcode:
moHilfe := TMoHilfe.create(nil);
try
  moHilfe.show;
  // oder
  // moHilfe.showModal;
finally
  moHilfe.free;
end;
Grüße
Klaus
Klaus

Geändert von Klaus01 ( 5. Feb 2020 um 09:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.549 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Was ist falsch am Aufruf und Freigaben von Create

  Alt 5. Feb 2020, 08:46
Ich dachte, es geht hier um ein TDataModule? Was gibt es da zu Showen oder Hiden?

Sherlock
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
7.990 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Was ist falsch am Aufruf und Freigaben von Create

  Alt 5. Feb 2020, 09:46
.. wenn Du es denn doch noch dynamisch erstellen willst..
Delphi-Quellcode:
moHilfe := TMoHilfe.create(nil);
try
  moHilfe.show;
  // oder
  // moHilfe.showModal;
finally
  moHilfe.free;
end;
Show kehrt (im Gegensatz zu ShowModal) sofort zurück, von daher erzeugt der Code eine Instanz der Klasse, ruft kurz Show auf und gibt dann die Instanz wieder frei. Das Formular, wenn es eins ist, blitzt also nur kurz auf.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 20:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf