Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Was ist an dieser Funktion falsch?
benedikt124 - Mo 24.11.08 18:08
Titel: Was ist an dieser Funktion falsch?
Hallo,
ich habe eine Funktion mit einer Indy-Komponente:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| function console(const befehl, pw, port, ip: String; out antwort: String): Boolean;
var pb_senden, strTemp, Daten, strTemp2, pb_str: String; IdUDPClient3: TIdUDPClient; e_stop_re_pb: Boolean;
begin pb_senden := 'pw '+pw+' '+befehl+''+#$00; IdUDPClient3.Host := ip; IdUDPClient3.Port := strtoint(port); IdUDPClient3.Active := true; try IdUDPClient3.Send(pb_senden); strTemp := IdUDPClient3.ReceiveString(160); pb_str := StringReplace(strTemp,'ÿÿÿÿprint','Antwort des Servers:',[rfReplaceAll, rfIgnoreCase]); Daten := StringReplace(pb_str,'^1439','' + #13#10 + '',[rfReplaceAll, rfIgnoreCase]); antwort := Daten; IdUDPClient3.Active := false; Result := True; except on E: EIdException do begin e_stop_re_pb := True; IdUDPClient3.Active := false; Result := False; end;
end;
end; |
Beim Ausführen kommt aber immer:
Quelltext
1:
| Zugriffsverletzung bei Adresse 00404038 |
Aber warum?
mfg
Bene
bummi - Mo 24.11.08 18:12
Du hast IdUDPClient3 nirgendwo erzeugt....
benedikt124 - Mo 24.11.08 18:34
Hallo
Delphi-Quelltext
1:
| var IdUDPClient3: TIdUDPClient; |
oder was meinst du jetzt?
bummi - Mo 24.11.08 18:40
IdUDPClient3:=TIdUDPClient.Create(self);
....
....
....
IdUDPClient3.Free;
oder eine Statische Komponente auf Deinem Form/Datenmodul
benedikt124 - Mo 24.11.08 18:50
Ahso okey,
auf dem Form habe ich die Komponente drin, es kommt der Fehler immer noch.
Wenn ich es mit
IdUDPClient3:=TIdUDPClient.Create(self);
bekomme ich jedoch den Fehler
Undefinierter Bezichner: self ...
Moderiert von
matze: Delphi-Tags hinzugefügt
bummi - Mo 24.11.08 19:02
ok, sorry ich hatte nicht gesehen daß Du eine "Nichtklassenmethode" verwendest.
Du könntest
IdUDPClient3:=TIdUDPClient.Create(nil);
verwenden
oder IdUDPClient3 als Parameter Deiner Funktion mitgeben
oder function Form1.console(const befehl, pw, port,....
aus Deiner Funtion machen.
Das Problem ist daß Du in Deinem Beispiel auf eine Variable zugreift hinter der nicht steht.
Moderiert von
matze: Delphi-Tags hinzugefügt
benedikt124 - Mo 24.11.08 19:54
Hmm ich habe jetzt
Frame9.console(const befehl, pw, port,....
ausprobiert, geht aber immer noch nicht :oops: :oops:
Delete - Mo 24.11.08 21:00
Dann mach doch aus der Funktion eine Methode und lass die Variablendeklaration des UDPClients weg.
benedikt124 - Di 25.11.08 17:52
Aber Moment,
wenn ich aus der Funktion eine Methode mache, dann bekomme ich doch kein Ergebnis zurück also zum Beispiel die
Antwort des Servers in einem String....
Oder bin ich da jetzt komplett falsch? :lol: :lol:
Delete - Di 25.11.08 17:54
Der Unterschied zwischen regulärer Funktion und Methode ist Dir geläufig?
benedikt124 - Di 25.11.08 18:52
Nicht wirklich ,
ich glaube ich missverstehe da gerade was ganz arg..
Delete - Di 25.11.08 20:16
Reguläre Funktion:
Delphi-Quelltext
1:
| function TuWas: integer; |
Methode von FrmMain:
Delphi-Quelltext
1:
| function TFrmMain.TuWas: integer; |
Ich hoffe, das ist nun klarer ;)
benedikt124 - Mi 26.11.08 08:16
Achsooo,
also in meinem Fall geht das auch so oder:
Delphi-Quelltext
1:
| function TFrame9.console(... |
hier kommt aber auch der Fehler... :oops: :oops:
Mordilion - Mi 26.11.08 08:57
Versuch mal so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| function console(const befehl, pw, port, ip: String; out antwort: String): Boolean; var pb_senden, strTemp, Daten, strTemp2, pb_str: String; IdUDPClient3: TIdUDPClient; e_stop_re_pb: Boolean; begin pb_senden := 'pw '+pw+' '+befehl+''+#$00;
IdUDPClient3 := TIdUDPClient.Create(nil); try IdUDPClient3.Host := ip; IdUDPClient3.Port := strtoint(port); IdUDPClient3.Active := true; try IdUDPClient3.Send(pb_senden); strTemp := IdUDPClient3.ReceiveString(160); pb_str := StringReplace(strTemp,'ÿÿÿÿprint','Antwort des Servers:',[rfReplaceAll, rfIgnoreCase]); Daten := StringReplace(pb_str,'^1439','' + #13#10 + '',[rfReplaceAll, rfIgnoreCase]); antwort := Daten; IdUDPClient3.Active := false; Result := True; except on E: EIdException do begin e_stop_re_pb := True; IdUDPClient3.Active := false; Result := False; end; end; finally IdUDPClient3.Free; end; end; |
Die Funktionist nicht von mir getestet worden!
Schau einfach mal ob der Fehler weiterhin auftritt.
Wenn es mit dieser Änderung klappen sollte, dann schau dir bitte noch ein paar Tutorials bezüglich Delphi an.
Gruß
Mordi
benedikt124 - Mi 26.11.08 14:54
Cool es geht... :D :D :D :D
Danke @all
| Zitat: |
Wenn es mit dieser Änderung klappen sollte, dann schau dir bitte noch ein paar Tutorials bezüglich Delphi an.
|
Das werde ich machen, nochmal Danke :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!