TIdUDPServer => EIdCouldNotBindSocket
-
Hallo,
ich habe urplötzlich Probleme mit TIdUDPServer. Weil mein Projekt Probleme mit alten (falschen) Abhängigkeiten hatte, habe ich die Projektdatei gelöscht und das Projekt neu aufgebaut. Seit dem funktioniert aber der TIdUDPServer nicht mehr. Direkt beim Start, also in dem Moment wo die Komponenten der Form inizialisiert werden bekomme ich die Fehlermeldung EIdCouldNotBindSocket.
Properties laut DFM-File:
object UDPServer: TIdUDPServer
Active = True
BroadcastEnabled = True
Bindings = <>
DefaultPort = 11880
OnUDPRead = UDPServerUDPRead
Left = 335
Top = 150
endegal wie ich den Port setzte, es klappt nicht. Vorher lief alles Perfekt. Woran liegt das?
(BDS 2006, Indy 9, Update2 und alle Hotfixes installiert, BDS gerade frisch installiert)mfg
xXx
-
Hab viel herumprobiert und folgendes herausgefunden:
In einem Minimalprojekt klappt alles wie es soll.
Wenn ich Aktive=true im Konstruktor der Form setzte, klappts auch nicht.
Wenn ich Aktive=true im OnShow setze klappt es...
Was auch immer... es klappt nu, warum anders nicht, wissen die Götter...mfg
xXx
-
Heureka!
Nachdem ich noch andere gruselige Dinge feststellen musste, habe ich bemerkt, dass in der Projekt.cpp mehrere Fenster doppelt erstellt werden. U.A. auch das Fenster in dem der UDPServer drin ist. Darum war der Socket beim 2. CreateForm selbstverständlich belegt.
Warum die IDE aber solchen Blödsinn gemacht hat, bleibt mir verborgen...mfg
xXx
-
Argh das hab, hatte ich auch schon mal, kann es sein, das du das gleich zum Programmstart in der
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { }
Die Formulare öffnest ? Ich habe die Vermutung das das Böse ist
-
Nein, die Formulare werden automatisch erzeugt, das ist das Problem. Weil beim erzeugen werden alle Komponenten erzeugt, UDPServer macht sein Binding... Wenn dann die Form ein zweites mal erzeugt wird, scheitert das Binding
In meiner Projekt.cpp stand:Application->CreateForm(__classid(TMeinFenster), &MeinFenster); //... noch mehr Fenster ... Application->CreateForm(__classid(TMeinFenster), &MeinFenster);
Und das war gemein ^^
EDIT: Sichtbarkeit der anderen Forms setzte ich im OnShow der MainForm.
mfg
xXx