AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke UDP Broadcast: Fehler bei OnUDPRead
Thema durchsuchen
Ansicht
Themen-Optionen

UDP Broadcast: Fehler bei OnUDPRead

Ein Thema von Gargamel · begonnen am 22. Okt 2012 · letzter Beitrag vom 17. Feb 2016
Antwort Antwort
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: UDP Broadcast: Fehler bei OnUDPRead

  Alt 10. Feb 2016, 10:06
Im Prinzip das gleiche wie von Gargamel in Posting #1.
Code:
typ
  TWSDiscovery = Class
  public
    constructor Create(); // override;
    destructor Destroy; override;
    procedure  Send_PROBE(RcvPort : word);
    procedure  Send_HELLO();
    procedure  Send_BYE();
    procedure  Send_PROBE_CHINACAM(RcvPort : word);
  private
    ... div var
    FMethod     : TMethod;
    udpSrv_Lstn : TIdUDPServer;
    udpSrv_Send : TIdUDPServer;
    TimeOutTimer : TTimer;
    ...
    procedure udpSrv_LstnRead(AThread : TIdUDPListenerThread;
                              AData   : TidBytes;
                              ABinding : TIdSocketHandle);
    procedure udpSrv_SendRead(AThread : TIdUDPListenerThread;
                              AData   : TidBytes;
                              ABinding : TIdSocketHandle);
    procedure TimeOutTimerOnTimer(Sender: TObject);
    ...
  published
    property ...
  end;

constructor TWSDiscovery.Create();
begin
  inherited Create;
  ...
  TimeOutTimer         := TTimer.Create(nil);
  TimeOutTimer.Enabled := false;
  TimeOutTimer.Interval := 3000;
  TimeOutTimer.OnTimer := TimeOutTimerOnTimer;
  // create the "listening" server for HELLO & BYE
  udpSrv_Lstn := TIdUDPServer.Create;
  // !!! http://www.delphigroups.info/2/11/215650.html
  FMethod.Data := udpSrv_Send;                   // !!!!
  FMethod.Code := @TWSDiscovery.udpSrv_SendRead; // !!!!
  with udpSrv_Send do begin                      // !!!!
    Active          := false;
    OnUDPRead       := TUDPReadEvent(FMethod);  // !!!!
//    OnUDPRead       := udpSrv_LstnRead;         // doesnt't work !!!
    Bindings.DefaultPort := WS_PORT_HELLOBYE;
    DefaultPort     := 20001;
    BufferSize      := 4096;
    ThreadedEvent   := true;
    BroadcastEnabled := true;
    Active          := True;
  end;
  // create the server for sending PROBE & listen for PROBEMATCH
  ...
  // das gleiche noch mal
end;
Eigentlich (!?) hab ich schon ne Lösung gefunden - siehe Link im Code bei Create.
Aber A) verstehe ich die auch nicht wirklich und B) geht mir nicht in den Kopf, warum das was in/auf einer Form funktioniert und ausgerechnet "nur" bei der Zuweisung der OnRead-procedure so ein Theater macht. Compilerfehler ?
Die Timer-Sache fnktioniert jedenfalls wie gewohnt.

Es spielt dabei anscheinend auch keine Geige, ob ich die var- und procedure Deklarationen unter private, protected, public oder published packe.

So wie es Remy Lebeau beschrirben hat und es da oben mit dem Umweg über die Zuweisung mit TMehtod steht, funktioniert es.
Sehr eigenartig ....

Geändert von TERWI (10. Feb 2016 um 11:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: UDP Broadcast: Fehler bei OnUDPRead

  Alt 10. Feb 2016, 10:14
Zitat:
// doesnt't work !!!
Was sagt der Compiler? Ich wette da steht der Grund.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: UDP Broadcast: Fehler bei OnUDPRead

  Alt 10. Feb 2016, 11:01
Steht im Post#7

"Incompatible Types: Parameter lists differ"
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: UDP Broadcast: Fehler bei OnUDPRead

  Alt 10. Feb 2016, 12:04
Man könnte jetzt natürlich einfach mal auf die Idee kommen und schaut nach, wie OnUDPRead deklariert ist.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: UDP Broadcast: Fehler bei OnUDPRead

  Alt 10. Feb 2016, 12:15
Das passt schon, wie ich es dort in dem Code geschrieben habe.
Indy 9 und 10 sind da leicht unterschiedlich ...

Noch mal zur Verinnerlichung: Ich habe den gesamten Hauptteil aus einer ganz normalen, funktionierenden Form herausgenommen und habe es einfach in eine separate Unit in eine Klasse verpackt.

In der Form geht das wie die Wutz - da hat der Compiler ja auch sogar selbst per Doppelklick die Prozedurdeklaration erstellt !
In der Klasse wird aus der ursprünglichen Dekl. plötzlich ein TUDPReadEvent und der Compiler mault endlos.
Das verstehe ich eben nicht ....
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: UDP Broadcast: Fehler bei OnUDPRead

  Alt 11. Feb 2016, 16:03
Keiner eine Idee ?
Ich habs hier nochmal als neuenThread mit erwas mehr text und anderer Erkenntnis gepostet:
http://www.delphipraxis.net/188225-i...onudpread.html
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: UDP Broadcast: Fehler bei OnUDPRead

  Alt 11. Feb 2016, 19:16
Problem gelöst !
Siehe hier: http://www.delphipraxis.net/1330094-post2.html
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: UDP Broadcast: Fehler bei OnUDPRead

  Alt 12. Feb 2016, 11:01
Genau darauf hat dich himitsu quasi hingewiesen. Du solltest gucken wie das OnUDPRead definiert ist.
Dann hättest du gemerkt dass da ein const fehlt.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:15 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