Hallo!
Ich bin im Moment dabei einen Server mit Hilfe von der IdTCPServer-Komponente zu programmieren, den man über eine Konsole steuern kann.
Die Eingabe der Befehle erfolgt über eine ComboBox, sodass man z.B. den String "START_SERVER(84)" als Befehl erhält.
Damit nun der Server auf Port 84 gestartet wird hab ich mir bisher folgendes überlegt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| type TServer = class public function SendCommand(Line: String): TStringList; published function START_SERVER(Parameter: String): TStringList; function STOPP_SERVER(Parameter: String): TStringList; function HELP(Parameter: String): TStringList; function CLEAR(Parameter: String): TStringList; function VERSION(Parameter: String): TStringList; end; |
In der Klasse TServer sind neben der Funktion zum Absenden eines Befehls ein Haufen von Unterbefehlen definiert, die man in die Konsole eingeben kann. Die Funktionen geben alle eine StringList zurück, die im Konsolenfenster angezeigt wird.
Die Funktion SendCommand ist nun wie folgt definiert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function TServer.SendCommand(Line: String): TStringList; var State: TStringList; c: function(Parameter: String):TStringList; begin Result:= TStringList.Create; try State:= TStringList.Create; c:= TServer.MethodAddress('START_SERVER'); State:= c('bla'); if State.Count <> 0 then Result.AddStrings(state); State.Free; except Result.Add('Fehler: %Details noch nicht implementiert%'); end; end; |
Ich ermittle also mit MethodAddress die entsprechende Funktion START_SERVER und rufe sie auf.
Bis hierhin klappt auch alles wunderbar. Alle Befehle werden ausgeführt (z.B. "CLEAR" oder "VERSION"). Auch "START_SERVER" wird fehlerlos aufgerufen, allerdings macht mir der Parameter Probleme. Ich kann nicht auf "Parameter" zugreifen ohne Zugriffsverletzungen zu verursachen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| function TServer.START_SERVER(Parameter: String): TStringList; begin Result:= TStringList.Create; Result.Add(Parameter + 'test'); end; |
Irgendwas scheint bei der Parameterübergabe falsch zu laufen, den auch der Debugger zeigt für die Parametervariable nur wirres Zeug an.
Habt ihr eine Idee, was falsch laufen könnte? Die ganze Lösung ist zugegeben ja etwas ungewöhnlich - ich habe sie übringens
von hier übernommen.
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt