Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi [TUdpSockUtil] - Absturz des Programms? Warum? (https://www.delphipraxis.net/98486-%5Btudpsockutil%5D-absturz-des-programms-warum.html)

xZise 28. Aug 2007 07:49


[TUdpSockUtil] - Absturz des Programms? Warum?
 
Hallo DP,
sorry, dass ich wieder nerve :)
aber
ich habe folgendes Programm:
Delphi-Quellcode:
procedure TfrmServSimu.FormCreate(Sender: TObject);
begin
  udpSocket := TUdpSockUtil.Create(self);
  udpSocket.OnReceive := udpSocketRecieve;
  udpSocket.LocalPort := 2007; // Empfangport
  udpSocket.RemotePort := 7002; // Sendeport
  udpSocket.Open;              // Empfänge annehmen
end;

procedure TfrmServSimu.FormDestroy(Sender: TObject);
begin
  udpSocket.Close;
  udpSocket.Free;
end;

procedure TfrmServSimu.udpSocketRecieve(Sender: TObject);
var
  sendIP : in_addr;
  msg : array of Byte;
  killStr : string;
  i : Integer;

  title, text : string;
begin
  SetLength(msg, udpSocket.ReceiveLength);
  udpSocket.ReceiveBuf(msg, Length(msg), sendIP);

  lFunktion.Caption := 'Funktionsnummer: ' + IntToStr(msg[0]);

  case msg[0] of
    0..3 : ;
    4 : begin // Message
      title := '';
      i := REQUEST_HEADER_LENGTH;
      while (i < High(msg)) and (msg[i] <> 0) do
      begin
        title := title + Chr(msg[i]);
        inc(i);
      end;
      text := '';
      inc(i);
      while (i < High(msg)) and (msg[i] <> 0) do
      begin
        text := text + Chr(msg[i]);
        inc(i);
      end;
      mExtra.Lines.Text := 'Titel: "' + title + '"' + #13#10 + 'Text: "' + text + '"' + #13#10 + 'Icon: ' + IntToStr(msg[i + 1]);
    end;
    5 : begin
      SetLength(killStr, Length(msg) - REQUEST_HEADER_LENGTH);
      for i := REQUEST_HEADER_LENGTH to High(msg) do
        killStr[i] := Chr(msg[i]);
      mExtra.Lines.Text := killStr;
    end;
    else begin
      MessageBox(0, PChar('Das Signal über Port 2007 mit den Funktionswert "' + IntToStr(msg[0]) + '" wurde entfangen.' + #13#10 + 'Da das Signal ausserhalb er Funktionswerte liegt wird das Signal ignoriert' + #13#10 + 'Sender-IP: ' + inet_ntoa(sendIP) + #13#10 + 'Dieser Vorfall wird von den Admins behandelt'), PChar('Illegaler Funktionswert'), MB_OK or MB_ICONWARNING);
    end;
  end;
end;
Ich will mit den Programm testen, ob Befehle korrekt übertragen werden.
Aber sobald ich etwas abschicke bekomme ich einen Fehler:
Zitat:

---------------------------
Anwendungsfehler
---------------------------
Exception EAccessViolation in Modul ServSimu.exe bei 00004B58.
Zugriffsverletzung bei Adresse 00404B58 in Modul 'ServSimu.exe'. Schreiben von Adresse 00C15C74.
---------------------------
OK
---------------------------
Ich habe schon debuggt, finde aber nicht heraus, warum er so abstürzt.

Habt ihr vielleicht eine Idee?

MfG
xZise

phlux 28. Aug 2007 07:53

Re: [TUdpSockUtil] - Absturz des Programms? Warum?
 
an welcher stelle im qc kriegst du die av?

xZise 28. Aug 2007 17:59

Re: [TUdpSockUtil] - Absturz des Programms? Warum?
 
Nach dem Empfangen, also (bei mir :)) Zeile 26.
Irgendwie scheint das ganz seltsam, weil ich dann ganz normal weiter springe (ins else) und dannach im QT von der Komponente...

phlux 28. Aug 2007 20:00

Re: [TUdpSockUtil] - Absturz des Programms? Warum?
 
hm komisch hätte jetzt darauf getippt, dass du die kompo noch nciht erzeugt hättest...

Narses 28. Aug 2007 22:36

Re: [TUdpSockUtil] - Absturz des Programms? Warum?
 
Moin!

Mach das mal so: :wink:
Delphi-Quellcode:
udpSocket.ReceiveBuf(msg[0], Length(msg), sendIP);
cu
Narses

xZise 29. Aug 2007 16:37

Re: [TUdpSockUtil] - Absturz des Programms? Warum?
 
Ich werde das mal so testen. :)
Klingt logisch, weil, wenn ich ein Array mit Filestream abspeichern möchte ja auch das übergeben muss :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:39 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