Tomas Hajny wrote:

I believe the C const construct (const declaration in a call marked as cdecl) is wrongly used in so32dll.connect (the meaning of this construct in C is different from the Pascal "const" modifier).

I am programming in Pascal so I can't see what C has to do with it ;-) I am only interested in changing the caling convention - not the meaning of the const which should be the same as var - with the exception that you are not allowed to change the parameter. So you are saying there is no way to make it behave like that? :-(

If address of the record should be passed, use either "var" modifier

That works - but it is not optimal as I have to double buffer all calls in the standard units from const to var. Sockets.pas:

Function Connect(Sock:Longint;const Addr; Addrlen:Longint):Boolean;
var
  sa : so32dll.SockAddr;
begin
  sa:=so32dll.SockAddr(Addr);
  Connect:=so32dll.Connect(Sock,sa,AddrLen)=0;
  if not Connect then
    SocketError:=so32dll.sock_errno
  else
    SocketError:=0;
end;

And it gets worse when I have an untyped buffer (as send does) - then I will have to allocate memory - copy the contents - call the dll - deallocate...

depend on used compiler options, so it's probably better to add explicit {$PACKRECORDS 1} to so32dll.pas.

Done

Take care,
   Soren


_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to