Autor Beitrag
Pseudo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16
Erhaltene Danke: 1



BeitragVerfasst: Do 27.09.12 21:42 
Moin EEler,

Ich versuche grade unter Lazarus (mit eingebundener WinSock) einen Server programmieren...
Aber Lazarus spukt mir Fehler aus:


ausblenden Delphi-Quelltext
1:
ConnectSocket := accept(FSocket, @SocketAddr,@AddrLen);					


Fehler:

"Error: Wrong number of parameters specified for call to "Accept""

Was ist falsch? Hab ich mich vertan? Oder liegt das an Lazarus?

Danke für die Hilfe!

Pseudo
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Do 27.09.12 22:28 
Die Unit winsock ist nicht gerade reichlich gefüllt, vom Kommentar abgesehen:

ausblenden Delphi-Quelltext
1:
2:
3:
unit winsock;
{$define winsock}
{$i pmwsock.pas}


und in der Unit pmwsock findet sich die Deklaration:

ausblenden Delphi-Quelltext
1:
2:
Function accept(s:TSocket; addr: PSockAddr; var addrlen : Longint) : TSocket; cdecl;
    external 'PMWSock' name 'accept';


Die Anzahl der Parameter scheint zu stimmen, insofern ist die Fehlermeldung schon einmal wahrscheinlich falsch. Vielleicht stimmen die Typen nicht?! Scheint aber auch nicht zuzutreffen, p ist vom Typ pointer. Hm... Fehlermeldung im sog. Bugtrucker eröffnen? Warum sollte die Version 1.0 perfekt sein? Oder im Lazarusforum nachfragen?

Edit: Das wird ja immer verrückter, dort finden sich sogar drei gleichnamige Deklarationen (wie ist so etwas möglich??):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Function accept(s: TSocket; Var addr; Var addrlen: LongInt): TSocket; cdecl;
    external 'PMWSock' name 'accept';
Function accept(s:TSocket; addr: PSockAddr; addrlen : PLongint) : TSocket; cdecl;
    external 'PMWSock' name 'accept';
Function accept(s:TSocket; addr: PSockAddr; var addrlen : Longint) : TSocket; cdecl;
    external 'PMWSock' name 'accept';
Pseudo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16
Erhaltene Danke: 1



BeitragVerfasst: Do 27.09.12 22:48 
Wie das möglich ist kann ich dir erklären:

Das heisst Überladung. Der Compiler sucht automatisch die Funktion, die die richtigen Parameter besitzt :D

Was ich grade rausgefunden habe:
Accept funktioniert so:

if Accept(S, Addr,Sin,Sout) then

Und ich kapiere nicht was Sin und Sout sein sollen?

Danke

Pseudo

Für diesen Beitrag haben gedankt: Delphi-Laie
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Do 27.09.12 22:52 
Dann können wir ja einfach die verkehrte Welt fortsetzen: Meine Versuche zu helfen, sind ohnehin nur stümperhaft, stattdessen weißt Du mehr als ich und kannst es erklären.

Wie if accept... funktionieren kann, ist mir schleierhaft, da keine der Versionen des acceptes einen booleschen Funktionsergebnistyp hat.

Sin und Sout sind natürlich Input und Output dieses ominösen "S".
Pseudo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16
Erhaltene Danke: 1



BeitragVerfasst: Do 27.09.12 23:08 
Ich bin so dumm!!!
Suche ich doch seit Stunden!
Ich hatte in der selben Unit eine Function die auch Accept heisst (Sorry, dass ich euch belästigt habe!)
Aber eine Sache habe ich gelernt: ich sollte nicht so dämlich sein, und gleich mal den Jump zur Deklaration nutzen

Danke

Kann geschlossen werden!