![]() |
unit initialisieren
Hallo zusammen,
was fehlt in folgender Lazarus unit:
Delphi-Quellcode:
sobald ich irgendwas im Bereich initialization ausführe schrabbelt's, besser gesagt, es passiert nichts mehr, das Prog startet nicht mehr.
unit Unit2;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, Dialogs; procedure init; procedure test; implementation procedure test; begin showmessage('Test'); end; procedure init; begin showmessage('init'); end; initialization begin init; end; end. In delphi würde das gehen. Das Problem ist wohl, dass die unit dialogs zu diesem zeitpunkt wo init ausgeführt wird noch nicht initialisiert ist. Aber wie kriegt man das hin? |
Re: unit initialisieren
Das begin/end im initialization-Teil finde ich etwas schräg und würde
Delphi-Quellcode:
vorziehen. Andererseits glaube ich nicht, dass sich der FPC davon ins Bockshorn jagen lässt und Müll generiert. :mrgreen:
initialization
init; end. ![]() Zitat:
|
Re: unit initialisieren
hab ich mit und ohne begin end ausprobiert und vieles andere mehr.
Das Ergebnis ist immer das gleiche: das Prog startet nicht. Das einzige was in diesem Block geht sind Variableninitialisierungen von variablen die in dieser Unit deklariert sind. zugegeben, showmessage macht keinen Sinn, aber as gleiche passiert wenn man z.B. eine TStrings Variable erzeugt. Das ist wiederum praktisch um ini dateien zu lesen. Aber alle Aufrufe von Prozeduren anderer Units scheitern. Mich wundert dass man dazu nichts beim googlen findet. Es ist doch nicht so unüblich ne unit zu initialisieren oder? Gibt es ne andere Möglichkeit? P.S. Die Prozedur wird wird ausgeführt, hopst dann in diverse units (je nachdem ob man Showmessage oder TStringlist.create oder... ausführt) endet dann in einer exception class unknown und dann muss ich Ctrl Alt Del bemühen und Lazarus abwürgen, sonst geht nichts mehr. |
Re: unit initialisieren
Zitat:
|
Re: unit initialisieren
Hast du die in deiner Unit verlinkten Units auch unter Uses der .dpr aufgeführt??
Wenn nicht mach das mal, und schaue ob es dann funktioniert! Edit: Aso, und Sie sollten dann vor der deiner Unit in der Liste aufgeführt werden. |
Re: unit initialisieren
hab mal alle units in die .lpr aufgenommen -> gleiches Ergebnis. geht nicht
"exception: class unknown" mehr kommt nicht. |
Re: unit initialisieren
Hi!
Hast du in deinem Hauptprogramm (*.lpr) die Unit Interfaces aufgeführt (am besten als erstes)? Diese wird benötigt, um die Schnittstelle zum Widgetset (Win32 GDI, GTK2, QT, etc) zu initialisieren. Ohne sie kann der Zugriff auf die LCL (den du mit ShowMessage ja machst) nicht funktionieren. Gruß, Sven |
Re: unit initialisieren
Im Abschnitt initialization sollte man ganz vorsichtig sein.
Der Code wird so früh im Programm aufgerufen, dass viele Dinge noch nicht möglich sind. ShowMessage() könnte durchaus dazu gehören. Folgender Code müsste eigentlich laufen:
Delphi-Quellcode:
implementation
var start_message : string; procedure test; begin showmessage('Test -' + start_message); end; procedure init; begin start_message := 'init ist erfolgt!' end; initialization begin init; end; end. |
Re: unit initialisieren
Zitat:
|
Re: unit initialisieren
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:27 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