| Autor |
Beitrag |
benedikt124
      
Beiträge: 27
|
Verfasst: Mo 24.11.08 18:08
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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Mo 24.11.08 18:12
Du hast IdUDPClient3 nirgendwo erzeugt....
|
|
benedikt124 
      
Beiträge: 27
|
Verfasst: Mo 24.11.08 18:34
Hallo
Delphi-Quelltext 1:
| var IdUDPClient3: TIdUDPClient; |
oder was meinst du jetzt?
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Mo 24.11.08 18:40
IdUDPClient3:=TIdUDPClient.Create(self);
....
....
....
IdUDPClient3.Free;
oder eine Statische Komponente auf Deinem Form/Datenmodul
|
|
benedikt124 
      
Beiträge: 27
|
Verfasst: 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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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 
      
Beiträge: 27
|
Verfasst: Mo 24.11.08 19:54
Hmm ich habe jetzt
Frame9.console(const befehl, pw, port,....
ausprobiert, geht aber immer noch nicht 
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 24.11.08 21:00
Dann mach doch aus der Funktion eine Methode und lass die Variablendeklaration des UDPClients weg.
|
|
benedikt124 
      
Beiträge: 27
|
Verfasst: 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? 
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 25.11.08 17:54
Der Unterschied zwischen regulärer Funktion und Methode ist Dir geläufig?
|
|
benedikt124 
      
Beiträge: 27
|
Verfasst: Di 25.11.08 18:52
Nicht wirklich ,
ich glaube ich missverstehe da gerade was ganz arg..
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 25.11.08 20:16
|
|
benedikt124 
      
Beiträge: 27
|
Verfasst: 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... 
|
|
Mordilion
      
Beiträge: 96
WinXP Prof., Win2k Prof.
Delphi 7 Prof., Delphi 2009 Prof., PHP4/5, CSS, HTML
|
Verfasst: Mi 26.11.08 08:57
Versuch mal so:
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
_________________ Für das große Chaos haben wir Computer. Die übrigen Fehler machen wir von Hand.
Der Mensch ist das wichtigste und kostbarste Peripheriegerät einer Computeranlage.
|
|
benedikt124 
      
Beiträge: 27
|
Verfasst: Mi 26.11.08 14:54
|
|