Entwickler-Ecke
Internet / Netzwerk - Tserversocket im "Hardcore Pascal"
olliistmeinname - So 12.10.03 18:59
Titel: Tserversocket im "Hardcore Pascal"
Hi ! Ich hab so ein kleines Problem . Ich möchte die Komponenten Tserversocket/Tclientsocket nicht in eine Unit , die zu einem Form gehört , initialisieren , sondern ohne Forms in der Projektdatei. Doch es klappt irgendwie nicht. Ich bekomme eine exception. :twisted: :twisted:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| program Project1;
uses windows,shellapi,ScktComp;
{$R *.res}
var serversocket1 : tserversocket;
begin serversocket1.Active := true; <-- Hier tritt der Fehler auf end. |
thx schon mal :D
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
MSCH - So 12.10.03 19:26
mit der Deklaration einer Variablen ist es nicht getan!!
du must
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var serversocket1 : tserversocket;
begin ServerSocket1:= TServerSocket.create; serversocket1.Active := true; <-- dann zugreifen!! end. |
grez
msch
olliistmeinname - So 12.10.03 19:31
THX !!
Quelltext
1:
| ServerSocket1:= TServerSocket.create(serversocket1); |
Da fehlte noch serversocket1 aber es geht !
mfg OLLI
MrSaint - So 12.10.03 20:54
wäre vielleicht auch anzumerken, dass du das dingens nach gebrauch wieder freigeben solltest ;) sonst gibts datenmüll im RAM und das mögen andere Programmierer gar net ;) könnte dann in irgendwelchen "unerklärlichen" exceptions von anderen Programmen enden... also: immer schön aufräumen ;)
MrSaint
olliistmeinname - So 12.10.03 22:18
So !
Jetzt bin ich soweit und habe die Komponente implementiert , aber da kommen schon die nächsten Probleme .
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| program projekt1;
uses windows ,ScktComp, Dialogs ; {$R *.res}
procedure ServerSocket1ClientRead(Sender: TObject; socket: TCustomWinSocket); var s :string;
begin s := socket.ReceiveText; showmessage(s); end;
begin serversocket1.active := true; ... ... end. |
Ich dachte mir , dass wenn der Client eine Nachricht an den Server geschickt hätte , die Procedure ausgeführt werden müsse. Ich dachte wieder falsch.
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
olliistmeinname - Di 14.10.03 07:24
Bitte :) Das Ist seht wichtig :) Jemand weiß doch sicher die Lösung :?
MrSaint - Di 14.10.03 11:38
versuch mal vorher das zu setzen:
Quelltext
1:
| ServerSocket1.OnClientRead:=ServerSocket1ClientRead; |
müsste dann so gehn, wenn du das vor
Quelltext
1:
| serversocket1.Active := true; |
setzt....
MrSaint
olliistmeinname - Di 14.10.03 14:09
Geht nicht. Er meint , dass seien inkompatible Typen : Methodenzeiger und Reguläre Prozedur.
barfuesser - Di 14.10.03 14:18
Das ist OK, Du mußt dem Methodenzeigen schon eine Objektmethode übergeben.
barfuesser
olliistmeinname - Di 14.10.03 14:52
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:
| program test;
uses windows ,messages,ScktComp,Dialogs ; {$R *.res}
procedure ServerClientRead(Sender:TObject;socket:TCustomWinSocket); var s :string; begin s := socket.ReceiveText; showmessage(s); end;
var serversocket1 : tserversocket; label start;
begin serverSocket1:= TServerSocket.create(serversocket1); Serversocket1.OnClientRead:=ServerClientRead; <<< Hier gibt es den Fehler beim kompilieren. serversocket1.Active := true;
start: sleep(100); goto start;
end. |
Irgendwas mache ich falsch :(
barfuesser - Di 14.10.03 15:03
Ich glaube zur Lösung Deines Problems, solltest Du Dir erst einmal Grundlagen der objektorientierten Programmierung mit Delphi aneignen.
Zum zweiten wird mir immer ganz anders, wenn ich in Quelltexten auf Label oder einen GoTo-Befehl stoße.
barfuesser
olliistmeinname - Di 14.10.03 15:10
Wenn ich das mit Forms mache , dann gibt es keine Probleme.
Man kann da ja mit einem Klick auf dem Objektinstpektor Proceduren definieren etc. Aber wenn man keine Forms benutzt , muss man das selber machen , was sonst Delphi übernimmt , oder ?
Naja das Problem besteht immer noch ...
barfuesser - Di 14.10.03 15:41
Wenn Du das mit Forms machst, dann werden automatisch Objekte erstellt. Und diese haben Methoden und keine Prozeduren. Wenn Du ohne Forms arbeiten möchtest, dann mußt Du trotdem Objektorientiert programmieren. Du mußt also eine Klasse erstellen, von der Du dann Objekte erzeugst. Und in dieser Klasse mußt Du dann eine Methode erzeugen, die Du an das Event übergeben kannst.
barfuesser
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!