请问大家一个奇怪的问题,winsock里connect的name是Tsockaddr,winsock2里connect的name是Psockaddr,即指向Tsockaddr的指针,是怎么回事?如何能做到兼容?过去的程序跑不了了.
 
我把过去的程序定义(成功的)帖出来.
Function connect(s: TSocket; var name: TSockAddr; namelen: Integer): Integer; stdcall;还有winsock2的定义
function connect(const s: TSocket; const name: PSockAddr; namelen: Integer): Integer; stdcall;谢谢!在线等!

解决方案 »

  1.   

    现在的问题是我把程序的函数改为winsock2的定义,结果根本收不到数据,直接出错.不只是一个指针的问题了.
      

  2.   

    提示我:
    Error: Types of actual and formal var parameters must be identical
      

  3.   

    winsock2的定义好象不对,如果用到winsock2我一般是用WSAConnect,所以没注意到这个问题
      

  4.   

    我两个库都用上.
    use
      ...
      WinSock,
      WinSock2,
      ...然后把winsock2里的connect定义都屏蔽掉,想恢复winsock1里的定义,可依然无效,提示上面的,形参和实参不一致,真奇怪.
      

  5.   

    还有accept的定义:
    accept(s: TSocket; var addr: PSockAddr; var addrlen: PInteger): TSocket; stdcall;winsock2里的定义:
    function accept(const s: TSocket; var addr: TSockAddr; var addrlen: Integer): TSocket; stdcall; 真是头疼.到底是怎么回事呀!!!
      

  6.   


    出现的这是编译错误, 意思是与函数变量参数(带有var前缀的函数自变量)所对应的应该是个变量。按照LZ描述的:
    use 
      ... 
      WinSock, 
      WinSock2, 
    这样的引用顺序,你所调用的connect将是WinSock.connect,这个函数的第二个参数是个变量参数。
      

  7.   

    加上前缀就可以了,WinSock.Connect()  WinSock2.WSAConnect()
      

  8.   

    如果同时use winsock 和 winsock2 ,尽管前面加了前缀winsock2.,winsock.,但编译时提示了奇怪的问题.而且winsock和winsock2前后顺序不同,编译的错误也不同,这可怎么办呀,晕死!winsock在前,编译原来的accept时提示Incompatible types: 'TSockAddrIn' and 'sockaddr_in'winsock2在前,编译原来的wsasendto时提示Incompatible types:  'sockaddr_in' and 'TSockAddrIn'
      

  9.   

    你要么单独引用Winsock, 要么单独引用Winsock2, 不要两个都引用。
      

  10.   

    怎么能够避免冲突,分别把函数按winsock和winsock2定义来编译呢? 是不是要某个编译开关叱?
      

  11.   


    这和编译工具有什么关系? 是Winsock 和 Winsock2的区别
      

  12.   

    我用了vc,连winsock和winsock2是啥也不用管,而且没任何错出现,真TNND!