AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

unit initialisieren

Ein Thema von Berni68 · begonnen am 11. Mai 2010 · letzter Beitrag vom 14. Mai 2010
Antwort Antwort
Seite 1 von 2  1 2      
Berni68

Registriert seit: 9. Jan 2006
Ort: Villingen
162 Beiträge
 
Delphi XE5 Professional
 
#1

unit initialisieren

  Alt 11. Mai 2010, 19:00
Hallo zusammen,

was fehlt in folgender Lazarus unit:
Delphi-Quellcode:
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.
sobald ich irgendwas im Bereich initialization ausführe schrabbelt's, besser gesagt, es passiert nichts mehr, das Prog startet nicht mehr.
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?
Bernhard
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#2

Re: unit initialisieren

  Alt 11. Mai 2010, 19:39
Das begin/end im initialization-Teil finde ich etwas schräg und würde
Delphi-Quellcode:
initialization
  init;
end.
vorziehen. Andererseits glaube ich nicht, dass sich der FPC davon ins Bockshorn jagen lässt und Müll generiert.

Hier steht
Zitat:
Every unit can contain an initialization section. The order of the initialization sections depend on the uses sections of each unit.
Das kann man jetzt interpretieren, wie man will. Setzt doch einfach mal einen Breakpoint in die initialization-Sektion von Dialogs.pas und schau, ob der angeprungen wird.
Uli Gerhardt
  Mit Zitat antworten Zitat
Berni68

Registriert seit: 9. Jan 2006
Ort: Villingen
162 Beiträge
 
Delphi XE5 Professional
 
#3

Re: unit initialisieren

  Alt 11. Mai 2010, 19:46
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.
Bernhard
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#4

Re: unit initialisieren

  Alt 11. Mai 2010, 20:09
Zitat von Berni68:
endet dann in einer exception class unknown
Meinst du EClassNotFound? Steht irgendwo, welche Klasse unbekannt ist?
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: unit initialisieren

  Alt 11. Mai 2010, 20:24
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.
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Berni68

Registriert seit: 9. Jan 2006
Ort: Villingen
162 Beiträge
 
Delphi XE5 Professional
 
#6

Re: unit initialisieren

  Alt 11. Mai 2010, 20:32
hab mal alle units in die .lpr aufgenommen -> gleiches Ergebnis. geht nicht

"exception: class unknown" mehr kommt nicht.
Bernhard
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#7

Re: unit initialisieren

  Alt 12. Mai 2010, 16:42
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
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: unit initialisieren

  Alt 12. Mai 2010, 17:14
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: unit initialisieren

  Alt 12. Mai 2010, 17:27
Zitat von shmia:
Der Code wird so früh im Programm aufgerufen, dass viele Dinge noch nicht möglich sind.
ShowMessage() könnte durchaus dazu gehören.
Was macht denn Lazarus da so anders als Delphi?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

Re: unit initialisieren

  Alt 12. Mai 2010, 18:27
Zitat von jaenicke:
Was macht denn Lazarus da so anders als Delphi?
Ich dachte ja FPC (Lazarus) initialisiert auch alle im Interface gelinkten Units, bevor die Initialization ausgeführt wird ... also irgendwie macht mir das Angst.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 +1. Es ist jetzt 22:48 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