Ich habe ein weiteres Programm von einer anderen Entwicklungsumgebung auf Lazarus portiert und somit schlagartig einen umfangreichen Code, der nun laufen sollte. (Das hat schon mehrfach gut geklappt.)
Diesmal habe ich einen Laufzeitfehler beim Starten des Programms. Ich habe in myproject.lpr im Haupt-Begin End Block einen Passus, wo ich meine zusätzlichen Forms erzeugen lasse:
Form5 := tForm5.Create (Form1);
Die Mainform und eine weitere sehr umfangreiche erzeugt er ohne Fehler, bei einer anderen nicht so umfangreichen stürzt er ab, ohne dass tForm5.OnCreate erreicht wird. Er bleibt hängen bei
Datei control.inc:
tControl.ReadState (Reader:TReader);
inherited ReadState(Reader);
und die nächste über Call Stack anspringbare Stelle meines eigenen Programmcodes ist die oben genannte Stelle aus der lpr-Datei.
Testweise habe ich die lfm-Datei stark zusammengestrichen, das hat keinen Effekt. Ich bin momentan ziemlich ratlos. Hat jemand eine Idee?
Absturz bei tForm.Create
-
- Beiträge: 6912
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Absturz bei tForm.Create
Könnte es sein, das folgende Zeile in den lpr-Datei fehlt ?
Code: Alles auswählen
Application.CreateForm(TForm5, Form5);
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Absturz bei tForm.Create
Ich tippe eher auf ein Komponenten-Problem. Sitzen auf dem Formular Komponenten, die nicht zum Standardlieferumfang von Lazarus gehören? Wenn ja, sind sie überhaupt installiert? Wenn ja, öffne ein leeres Formular und klicke jede der Zusatzkomponenten der Reihe nach drauf. Dazwischen übersetzen und starten. Läuft dieses Test-Programm ohne Absturz? Wenn nicht, hast du die schuldige Komponente gefunden. Suche nach einer aktualisierten Version, insbesondere eine spezielle Lazarus-Version.
-
- Beiträge: 142
- Registriert: Sa 30. Jan 2010, 19:35
- OS, Lazarus, FPC: Linux64, Wiindows32, MacOS, Lazarus 1.8.2
- CPU-Target: xxBit
Re: Absturz bei tForm.Create
Nein, ich habe die Mainform entsprechend erzeugt,
Application.CreateForm (TForm1, Form1);
alle anderen dann wie oben dargestellt.
Ich habe inzwischen noch die Packages abgeglichen. Ich habe nämlich ein ähnliches, ebenfalls portiertes Projekt, und das läuft prima.
Es wird nach der Form1 nur noch die Form2 created, alle anderen schlagen dann fehl. Es sind zum Teil sehr einfache Forms, ohne irgendwelche spezielle Components. Inzwischen habe ich festgestellt, dass bei der Form2, die noch erzeugt wurde, eine einfache Caption := 'captiontext' auch fehlschlägt.
Inzwischen habe ich noch kontrolliert, dass ich die lfm-Ressourcen ordnungsgemäß eingebunden habe und in der lpr-Datei die Ressourceneinbindung *.res steht. Alles, was ich bislang überprüfen konnte, ist genauso wie bei dem Projekt, das läuft.
Application.CreateForm (TForm1, Form1);
alle anderen dann wie oben dargestellt.
Ich habe inzwischen noch die Packages abgeglichen. Ich habe nämlich ein ähnliches, ebenfalls portiertes Projekt, und das läuft prima.
Es wird nach der Form1 nur noch die Form2 created, alle anderen schlagen dann fehl. Es sind zum Teil sehr einfache Forms, ohne irgendwelche spezielle Components. Inzwischen habe ich festgestellt, dass bei der Form2, die noch erzeugt wurde, eine einfache Caption := 'captiontext' auch fehlschlägt.
Inzwischen habe ich noch kontrolliert, dass ich die lfm-Ressourcen ordnungsgemäß eingebunden habe und in der lpr-Datei die Ressourceneinbindung *.res steht. Alles, was ich bislang überprüfen konnte, ist genauso wie bei dem Projekt, das läuft.
Re: Absturz bei tForm.Create
Du kannst recht einfach testen, ob die .lfm defekt ist.
Einfachdurch
ersetzen.
Wenn das erfolgreich funktioniert, hat die .lfm, in der TForm5 beheimatet ist, einen Fehler (bzw. unbekannten Eintrag/Property).
Randbemerkung: So einen oder ähnlichen Fehler bekomme ich auch manchmal, wenn ich mit eigenen Packages arbeite. Z.B., wenn ich eine Änderung in einem published Property meines Package vornehme und das Projekt auf einem anderen Rechner/OS testen will und dort vergaß das Package ebenfalls zu updaten.
Einfach
Code: Alles auswählen
Form5 := tForm5.Create (Form1);
Code: Alles auswählen
Form5 := tForm5.CreateNew (Form1);
Wenn das erfolgreich funktioniert, hat die .lfm, in der TForm5 beheimatet ist, einen Fehler (bzw. unbekannten Eintrag/Property).
Randbemerkung: So einen oder ähnlichen Fehler bekomme ich auch manchmal, wenn ich mit eigenen Packages arbeite. Z.B., wenn ich eine Änderung in einem published Property meines Package vornehme und das Projekt auf einem anderen Rechner/OS testen will und dort vergaß das Package ebenfalls zu updaten.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 142
- Registriert: Sa 30. Jan 2010, 19:35
- OS, Lazarus, FPC: Linux64, Wiindows32, MacOS, Lazarus 1.8.2
- CPU-Target: xxBit
Re: Absturz bei tForm.Create
(Problem gelöst:) Ich habe jetzt noch weiter experimentiert und erstmal herausgefunden, dass nur rund die Hälfte meiner 15 Forms betroffen sind. Auf den ersten Blick konnte ich keine Gemeinsamkeiten finden. Einmal hatte ich "public" statt gar nichts (= published) am Anfang der Klassendeklaration geschrieben, das war ein Grund für einen Absturz. Die meisten Abstürze ergaben sich aber dadurch, dass die LFM-Datei nicht exakt mit der Klassendeklaration übereinstimmte: Andere Namen für die Components (z. B. Edit0 statt Edit1), dann Component-Events in der LFM-Datei, die keine korrespondierende Prozedur in der Klassendeklaration hatten oder falsche Typbezeichnungen, beispielsweise in der LFM-Datei tButton und im Quelltext tBitBtn. Das meiste war schon korrekt, aber eine Handvoll Fehler reichen, dass nichts mehr geht. Danke für Euer Mitdenken. Erstaunlicherweise hat der Compiler diese Dinge nicht bemerkt, sondern erst zur Laufzeit. Zum Teil kamen sogar recht hilfreiche Fehlermeldungen zur Laufzeit, aber auch völlig nichtssagende.