请问大家一个奇怪的问题,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;谢谢!在线等!
我把过去的程序定义(成功的)帖出来.
Function connect(s: TSocket; var name: TSockAddr; namelen: Integer): Integer; stdcall;还有winsock2的定义
function connect(const s: TSocket; const name: PSockAddr; namelen: Integer): Integer; stdcall;谢谢!在线等!
Error: Types of actual and formal var parameters must be identical
use
...
WinSock,
WinSock2,
...然后把winsock2里的connect定义都屏蔽掉,想恢复winsock1里的定义,可依然无效,提示上面的,形参和实参不一致,真奇怪.
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; 真是头疼.到底是怎么回事呀!!!
出现的这是编译错误, 意思是与函数变量参数(带有var前缀的函数自变量)所对应的应该是个变量。按照LZ描述的:
use
...
WinSock,
WinSock2,
这样的引用顺序,你所调用的connect将是WinSock.connect,这个函数的第二个参数是个变量参数。
这和编译工具有什么关系? 是Winsock 和 Winsock2的区别