JwaWinsock2.pas
上传用户:davidchvip
上传日期:2009-07-28
资源大小:1749k
文件大小:139k
源码类别:

Windows编程

开发平台:

Delphi

  1. {$EXTERNALSYM WSAGetQOSByName}
  2. function WSAHtonl(s: TSocket; hostlong: u_long; var lpnetlong: u_long): Integer; stdcall;
  3. {$EXTERNALSYM WSAHtonl}
  4. function WSAHtons(s: TSocket; hostshort: u_short; var lpnetshort: u_short): Integer; stdcall;
  5. {$EXTERNALSYM WSAHtons}
  6. function WSAIoctl(s: TSocket; dwIoControlCode: DWORD; lpvInBuffer: LPVOID; cbInBuffer: DWORD;
  7.   lpvOutBuffer: LPVOID; cbOutBuffer: DWORD; var lpcbBytesReturned: DWORD;
  8.   lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE): Integer; stdcall;
  9. {$EXTERNALSYM WSAIoctl}
  10. function WSAJoinLeaf(s: TSocket; name: PSockAddr; namelen: Integer; lpCallerData: LPWSABUF;
  11.   lpCalleeData: LPWSABUF; lpSQOS, lpGQOS: LPQOS; dwFlags: DWORD): TSocket; stdcall;
  12. {$EXTERNALSYM WSAJoinLeaf}
  13. function WSANtohl(s: TSocket; netlong: u_long; var lphostlong: u_long): Integer; stdcall;
  14. {$EXTERNALSYM WSANtohl}
  15. function WSANtohs(s: TSocket; netshort: u_short; var lphostshort: u_short): Integer; stdcall;
  16. {$EXTERNALSYM WSANtohs}
  17. function WSARecv(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
  18.   var lpNumberOfBytesRecvd, lpFlags: DWORD; lpOverlapped: LPWSAOVERLAPPED;
  19.   lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE): Integer; stdcall;
  20. {$EXTERNALSYM WSARecv}
  21. function WSARecvDisconnect(s: TSocket; lpInboundDisconnectData: LPWSABUF): Integer; stdcall;
  22. {$EXTERNALSYM WSARecvDisconnect}
  23. function WSARecvFrom(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
  24.   var lpNumberOfBytesRecvd, lpFlags: DWORD; lpFrom: PSockAddr; lpFromlen: PINT;
  25.   lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE): Integer; stdcall;
  26. {$EXTERNALSYM WSARecvFrom}
  27. function WSAResetEvent(hEvent: WSAEVENT): BOOL; stdcall;
  28. {$EXTERNALSYM WSAResetEvent}
  29. function WSASend(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
  30.   var lpNumberOfBytesSent: DWORD; dwFlags: DWORD; lpOverlapped: LPWSAOVERLAPPED;
  31.   lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE): Integer; stdcall;
  32. {$EXTERNALSYM WSASend}
  33. function WSASendDisconnect(s: TSocket; lpOutboundDisconnectData: LPWSABUF): Integer; stdcall;
  34. {$EXTERNALSYM WSASendDisconnect}
  35. function WSASendTo(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
  36.   var lpNumberOfBytesSent: DWORD; dwFlags: DWORD; lpTo: PSockAddr; iTolen: Integer;
  37.   lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE): Integer; stdcall;
  38. {$EXTERNALSYM WSASendTo}
  39. function WSASetEvent(hEvent: WSAEVENT): BOOL; stdcall;
  40. {$EXTERNALSYM WSASetEvent}
  41. function WSASocketA(af, type_, protocol: Integer; lpProtocolInfo: LPWSAPROTOCOL_INFOA;
  42.   g: GROUP; dwFlags: DWORD): TSocket; stdcall;
  43. {$EXTERNALSYM WSASocketA}
  44. function WSASocketW(af, type_, protocol: Integer; lpProtocolInfo: LPWSAPROTOCOL_INFOW;
  45.   g: GROUP; dwFlags: DWORD): TSocket; stdcall;
  46. {$EXTERNALSYM WSASocketW}
  47. {$IFDEF UNICODE}
  48. function WSASocket(af, type_, protocol: Integer; lpProtocolInfo: LPWSAPROTOCOL_INFOW;
  49.   g: GROUP; dwFlags: DWORD): TSocket; stdcall;
  50. {$EXTERNALSYM WSASocket}
  51. {$ELSE}
  52. function WSASocket(af, type_, protocol: Integer; lpProtocolInfo: LPWSAPROTOCOL_INFOA;
  53.   g: GROUP; dwFlags: DWORD): TSocket; stdcall;
  54. {$EXTERNALSYM WSASocket}
  55. {$ENDIF}
  56. function WSAWaitForMultipleEvents(cEvents: DWORD; lphEvents: PWSAEVENT;
  57.   fWaitAll: BOOL; dwTimeout: DWORD; fAlertable: BOOL): DWORD; stdcall;
  58. {$EXTERNALSYM WSAWaitForMultipleEvents}
  59. function WSAAddressToStringA(lpsaAddress: LPSOCKADDR; dwAddressLength: DWORD;
  60.   lpProtocolInfo: LPWSAPROTOCOL_INFOA; lpszAddressString: LPSTR;
  61.   var lpdwAddressStringLength: DWORD): Integer; stdcall;
  62. {$EXTERNALSYM WSAAddressToStringA}
  63. function WSAAddressToStringW(lpsaAddress: LPSOCKADDR; dwAddressLength: DWORD;
  64.   lpProtocolInfo: LPWSAPROTOCOL_INFOW; lpszAddressString: LPWSTR;
  65.   var lpdwAddressStringLength: DWORD): Integer; stdcall;
  66. {$EXTERNALSYM WSAAddressToStringW}
  67. {$IFDEF UNICODE}
  68. function WSAAddressToString(lpsaAddress: LPSOCKADDR; dwAddressLength: DWORD;
  69.   lpProtocolInfo: LPWSAPROTOCOL_INFOW; lpszAddressString: LPWSTR;
  70.   var lpdwAddressStringLength: DWORD): Integer; stdcall;
  71. {$EXTERNALSYM WSAAddressToString}
  72. {$ELSE}
  73. function WSAAddressToString(lpsaAddress: LPSOCKADDR; dwAddressLength: DWORD;
  74.   lpProtocolInfo: LPWSAPROTOCOL_INFOA; lpszAddressString: LPSTR;
  75.   var lpdwAddressStringLength: DWORD): Integer; stdcall;
  76. {$EXTERNALSYM WSAAddressToString}
  77. {$ENDIF}
  78. function WSAStringToAddressA(AddressString: LPSTR; AddressFamily: Integer;
  79.   lpProtocolInfo: LPWSAPROTOCOL_INFOA; lpAddress: LPSOCKADDR;
  80.   var lpAddressLength: Integer): Integer; stdcall;
  81. {$EXTERNALSYM WSAStringToAddressA}
  82. function WSAStringToAddressW(AddressString: LPWSTR; AddressFamily: Integer;
  83.   lpProtocolInfo: LPWSAPROTOCOL_INFOW; lpAddress: LPSOCKADDR;
  84.   var lpAddressLength: Integer): Integer; stdcall;
  85. {$EXTERNALSYM WSAStringToAddressW}
  86. {$IFDEF UNICODE}
  87. function WSAStringToAddress(AddressString: LPWSTR; AddressFamily: Integer;
  88.   lpProtocolInfo: LPWSAPROTOCOL_INFOW; lpAddress: LPSOCKADDR;
  89.   var lpAddressLength: Integer): Integer; stdcall;
  90. {$EXTERNALSYM WSAStringToAddress}
  91. {$ELSE}
  92. function WSAStringToAddress(AddressString: LPSTR; AddressFamily: Integer;
  93.   lpProtocolInfo: LPWSAPROTOCOL_INFOA; lpAddress: LPSOCKADDR;
  94.   var lpAddressLength: Integer): Integer; stdcall;
  95. {$EXTERNALSYM WSAStringToAddress}
  96. {$ENDIF}
  97. // Registration and Name Resolution API functions
  98. function WSALookupServiceBeginA(lpqsRestrictions: LPWSAQUERYSETA;
  99.   dwControlFlags: DWORD; var lphLookup: HANDLE): Integer; stdcall;
  100. {$EXTERNALSYM WSALookupServiceBeginA}
  101. function WSALookupServiceBeginW(lpqsRestrictions: LPWSAQUERYSETW;
  102.   dwControlFlags: DWORD; var lphLookup: HANDLE): Integer; stdcall;
  103. {$EXTERNALSYM WSALookupServiceBeginW}
  104. {$IFDEF UNICODE}
  105. function WSALookupServiceBegin(lpqsRestrictions: LPWSAQUERYSETW;
  106.   dwControlFlags: DWORD; var lphLookup: HANDLE): Integer; stdcall;
  107. {$EXTERNALSYM WSALookupServiceBegin}
  108. {$ELSE}
  109. function WSALookupServiceBegin(lpqsRestrictions: LPWSAQUERYSETA;
  110.   dwControlFlags: DWORD; var lphLookup: HANDLE): Integer; stdcall;
  111. {$EXTERNALSYM WSALookupServiceBegin}
  112. {$ENDIF}
  113. function WSALookupServiceNextA(hLookup: HANDLE; dwControlFlags: DWORD;
  114.   var lpdwBufferLength: DWORD; lpqsResults: LPWSAQUERYSETA): Integer; stdcall;
  115. {$EXTERNALSYM WSALookupServiceNextA}
  116. function WSALookupServiceNextW(hLookup: HANDLE; dwControlFlags: DWORD;
  117.   var lpdwBufferLength: DWORD; lpqsResults: LPWSAQUERYSETW): Integer; stdcall;
  118. {$EXTERNALSYM WSALookupServiceNextW}
  119. {$IFDEF UNICODE}
  120. function WSALookupServiceNext(hLookup: HANDLE; dwControlFlags: DWORD;
  121.   var lpdwBufferLength: DWORD; lpqsResults: LPWSAQUERYSETW): Integer; stdcall;
  122. {$EXTERNALSYM WSALookupServiceNext}
  123. {$ELSE}
  124. function WSALookupServiceNext(hLookup: HANDLE; dwControlFlags: DWORD;
  125.   var lpdwBufferLength: DWORD; lpqsResults: LPWSAQUERYSETA): Integer; stdcall;
  126. {$EXTERNALSYM WSALookupServiceNext}
  127. {$ENDIF}
  128. function WSANSPIoctl(hLookup: HANDLE; dwControlCode: DWORD; lpvInBuffer: LPVOID; cbInBuffer: DWORD;
  129.   lpvOutBuffer: LPVOID; cbOutBuffer: DWORD; lpcbBytesReturned: LPDWORD; lpCompletion: LPWSACOMPLETION): Integer; stdcall;
  130. {$EXTERNALSYM WSANSPIoctl}
  131. function WSALookupServiceEnd(hLookup: HANDLE): Integer; stdcall;
  132. {$EXTERNALSYM WSALookupServiceEnd}
  133. function WSAInstallServiceClassA(lpServiceClassInfo: LPWSASERVICECLASSINFOA): Integer; stdcall;
  134. {$EXTERNALSYM WSAInstallServiceClassA}
  135. function WSAInstallServiceClassW(lpServiceClassInfo: LPWSASERVICECLASSINFOW): Integer; stdcall;
  136. {$EXTERNALSYM WSAInstallServiceClassW}
  137. {$IFDEF UNICODE}
  138. function WSAInstallServiceClass(lpServiceClassInfo: LPWSASERVICECLASSINFOW): Integer; stdcall;
  139. {$EXTERNALSYM WSAInstallServiceClass}
  140. {$ELSE}
  141. function WSAInstallServiceClass(lpServiceClassInfo: LPWSASERVICECLASSINFOA): Integer; stdcall;
  142. {$EXTERNALSYM WSAInstallServiceClass}
  143. {$ENDIF}
  144. function WSARemoveServiceClass(const lpServiceClassId: TGUID): Integer; stdcall;
  145. {$EXTERNALSYM WSARemoveServiceClass}
  146. function WSAGetServiceClassInfoA(const lpProviderId, lpServiceClassId: TGUID;
  147.   var lpdwBufSize: DWORD; lpServiceClassInfo: LPWSASERVICECLASSINFOA): Integer; stdcall;
  148. {$EXTERNALSYM WSAGetServiceClassInfoA}
  149. function WSAGetServiceClassInfoW(const lpProviderId, lpServiceClassId: TGUID;
  150.   var lpdwBufSize: DWORD; lpServiceClassInfo: LPWSASERVICECLASSINFOW): Integer; stdcall;
  151. {$EXTERNALSYM WSAGetServiceClassInfoW}
  152. {$IFDEF UNICODE}
  153. function WSAGetServiceClassInfo(const lpProviderId, lpServiceClassId: TGUID;
  154.   var lpdwBufSize: DWORD; lpServiceClassInfo: LPWSASERVICECLASSINFOW): Integer; stdcall;
  155. {$EXTERNALSYM WSAGetServiceClassInfo}
  156. {$ELSE}
  157. function WSAGetServiceClassInfo(const lpProviderId, lpServiceClassId: TGUID;
  158.   var lpdwBufSize: DWORD; lpServiceClassInfo: LPWSASERVICECLASSINFOA): Integer; stdcall;
  159. {$EXTERNALSYM WSAGetServiceClassInfo}
  160. {$ENDIF}
  161. function WSAEnumNameSpaceProvidersA(var lpdwBufferLength: DWORD; lpnspBuffer: LPWSANAMESPACE_INFOA): Integer; stdcall;
  162. {$EXTERNALSYM WSAEnumNameSpaceProvidersA}
  163. function WSAEnumNameSpaceProvidersW(var lpdwBufferLength: DWORD; lpnspBuffer: LPWSANAMESPACE_INFOW): Integer; stdcall;
  164. {$EXTERNALSYM WSAEnumNameSpaceProvidersW}
  165. {$IFDEF UNICODE}
  166. function WSAEnumNameSpaceProviders(var lpdwBufferLength: DWORD; lpnspBuffer: LPWSANAMESPACE_INFOW): Integer; stdcall;
  167. {$EXTERNALSYM WSAEnumNameSpaceProviders}
  168. {$ELSE}
  169. function WSAEnumNameSpaceProviders(var lpdwBufferLength: DWORD; lpnspBuffer: LPWSANAMESPACE_INFOA): Integer; stdcall;
  170. {$EXTERNALSYM WSAEnumNameSpaceProviders}
  171. {$ENDIF}
  172. function WSAGetServiceClassNameByClassIdA(const lpServiceClassId: TGUID;
  173.   lpszServiceClassName: LPSTR; var lpdwBufferLength: DWORD): Integer; stdcall;
  174. {$EXTERNALSYM WSAGetServiceClassNameByClassIdA}
  175. function WSAGetServiceClassNameByClassIdW(const lpServiceClassId: TGUID;
  176.   lpszServiceClassName: LPWSTR; var lpdwBufferLength: DWORD): Integer; stdcall;
  177. {$EXTERNALSYM WSAGetServiceClassNameByClassIdW}
  178. {$IFDEF UNICODE}
  179. function WSAGetServiceClassNameByClassId(const lpServiceClassId: TGUID;
  180.   lpszServiceClassName: LPWSTR; var lpdwBufferLength: DWORD): Integer; stdcall;
  181. {$EXTERNALSYM WSAGetServiceClassNameByClassId}
  182. {$ELSE}
  183. function WSAGetServiceClassNameByClassId(const lpServiceClassId: TGUID;
  184.   lpszServiceClassName: LPSTR; var lpdwBufferLength: DWORD): Integer; stdcall;
  185. {$EXTERNALSYM WSAGetServiceClassNameByClassId}
  186. {$ENDIF}
  187. function WSASetServiceA(lpqsRegInfo: LPWSAQUERYSETA; essoperation: WSAESETSERVICEOP;
  188.   dwControlFlags: DWORD): Integer; stdcall;
  189. {$EXTERNALSYM WSASetServiceA}
  190. function WSASetServiceW(lpqsRegInfo: LPWSAQUERYSETW; essoperation: WSAESETSERVICEOP;
  191.   dwControlFlags: DWORD): Integer; stdcall;
  192. {$EXTERNALSYM WSASetServiceW}
  193. {$IFDEF UNICODE}
  194. function WSASetService(lpqsRegInfo: LPWSAQUERYSETW; essoperation: WSAESETSERVICEOP;
  195.   dwControlFlags: DWORD): Integer; stdcall;
  196. {$EXTERNALSYM WSASetService}
  197. {$ELSE}
  198. function WSASetService(lpqsRegInfo: LPWSAQUERYSETA; essoperation: WSAESETSERVICEOP;
  199.   dwControlFlags: DWORD): Integer; stdcall;
  200. {$EXTERNALSYM WSASetService}
  201. {$ENDIF}
  202. function WSAProviderConfigChange(var lpNotificationHandle: HANDLE;
  203.   lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE): Integer; stdcall;
  204. {$EXTERNALSYM WSAProviderConfigChange}
  205. // Microsoft Windows Extended data types
  206. type
  207.   PSOCKADDR_IN = ^sockaddr_in;
  208.   {$EXTERNALSYM PSOCKADDR_IN}
  209.   LPSOCKADDR_IN = ^sockaddr_in;
  210.   {$EXTERNALSYM LPSOCKADDR_IN}
  211.   LPLINGER = PLINGER;
  212.   {$EXTERNALSYM LPLINGER}
  213.   PIN_ADDR = ^in_addr;
  214.   {$EXTERNALSYM PIN_ADDR}
  215.   LPIN_ADDR = ^in_addr;
  216.   {$EXTERNALSYM LPIN_ADDR}
  217.   PFD_SET = ^fd_set;
  218.   {$EXTERNALSYM PFD_SET}
  219.   LPFD_SET = ^fd_set;
  220.   {$EXTERNALSYM LPFD_SET}
  221.   LPHOSTENT = PHOSTENT;
  222.   {$EXTERNALSYM LPHOSTENT}
  223.   LPSERVENT = PSERVENT;
  224.   {$EXTERNALSYM LPSERVENT}
  225.   LPPROTOENT = PPROTOENT;
  226.   {$EXTERNALSYM LPPROTOENT}
  227.   LPTIMEVAL = PTIMEVAL;
  228.   {$EXTERNALSYM LPTIMEVAL}
  229. //
  230. // Windows message parameter composition and decomposition
  231. // macros.
  232. //
  233. // WSAMAKEASYNCREPLY is intended for use by the Windows Sockets implementation
  234. // when constructing the response to a WSAAsyncGetXByY() routine.
  235. //
  236. function WSAMAKEASYNCREPLY(buflen, error: WORD): DWORD;
  237. {$EXTERNALSYM WSAMAKEASYNCREPLY}
  238. //
  239. // WSAMAKESELECTREPLY is intended for use by the Windows Sockets implementation
  240. // when constructing the response to WSAAsyncSelect().
  241. //
  242. function WSAMAKESELECTREPLY(event, error: WORD): DWORD;
  243. {$EXTERNALSYM WSAMAKESELECTREPLY}
  244. //
  245. // WSAGETASYNCBUFLEN is intended for use by the Windows Sockets application
  246. // to extract the buffer length from the lParam in the response
  247. // to a WSAAsyncGetXByY().
  248. //
  249. function WSAGETASYNCBUFLEN(lParam: DWORD): WORD;
  250. {$EXTERNALSYM WSAGETASYNCBUFLEN}
  251. //
  252. // WSAGETASYNCERROR is intended for use by the Windows Sockets application
  253. // to extract the error code from the lParam in the response
  254. // to a WSAGetXByY().
  255. //
  256. function WSAGETASYNCERROR(lParam: DWORD): WORD;
  257. {$EXTERNALSYM WSAGETASYNCERROR}
  258. //
  259. // WSAGETSELECTEVENT is intended for use by the Windows Sockets application
  260. // to extract the event code from the lParam in the response
  261. // to a WSAAsyncSelect().
  262. //
  263. function WSAGETSELECTEVENT(lParam: DWORD): WORD;
  264. {$EXTERNALSYM WSAGETSELECTEVENT}
  265. //
  266. // WSAGETSELECTERROR is intended for use by the Windows Sockets application
  267. // to extract the error code from the lParam in the response
  268. // to a WSAAsyncSelect().
  269. //
  270. function WSAGETSELECTERROR(lParam: DWORD): WORD;
  271. {$EXTERNALSYM WSAGETSELECTERROR}
  272. implementation
  273. const
  274.   ws2_32 = 'ws2_32.dll';
  275. {$IFDEF DYNAMIC_LINK}
  276. var
  277.   ___WSAFDIsSet: Pointer;
  278. function __WSAFDIsSet;
  279. begin
  280.   GetProcedureAddress(___WSAFDIsSet, ws2_32, '__WSAFDIsSet');
  281.   asm
  282.     mov esp, ebp
  283.     pop ebp
  284.     jmp [___WSAFDIsSet]
  285.   end;
  286. end;
  287. {$ELSE}
  288. function __WSAFDIsSet; external ws2_32 name '__WSAFDIsSet';
  289. {$ENDIF DYNAMIC_LINK}
  290. procedure FD_CLR(fd: TSocket; var fdset: TFdSet);
  291. var
  292.   I: Cardinal;
  293. begin
  294.   I := 0;
  295.   while I < fdset.fd_count do
  296.   begin
  297.     if fdset.fd_array[I] = fd then
  298.     begin
  299.       while I < fdset.fd_count - 1 do
  300.       begin
  301.         fdset.fd_array[I] := fdset.fd_array[I + 1];
  302.         Inc(I);
  303.       end;
  304.       fdset.fd_count := fdset.fd_count - 1;
  305.       Break;
  306.     end;
  307.     Inc(I);
  308.   end;
  309. end;
  310. procedure _FD_SET(fd: TSocket; var fdset: TFDSet);
  311. var
  312.   I: Cardinal;
  313. begin
  314.   I := 0;
  315.   while I < fdset.fd_count do
  316.   begin
  317.     if fdset.fd_array[I] = fd then Break;
  318.     Inc(I);
  319.   end;
  320.   if I = fdset.fd_count then
  321.   begin
  322.     if fdset.fd_count < FD_SETSIZE then
  323.     begin
  324.       fdset.fd_array[I] := fd;
  325.       fdset.fd_count := fdset.fd_count + 1;
  326.     end;
  327.   end;
  328. end;
  329. procedure FD_ZERO(var fdset: TFdSet);
  330. begin
  331.   fdset.fd_count := 0;
  332. end;
  333. function FD_ISSET(fd: TSocket; var fdset: TFdSet): Boolean;
  334. begin
  335.   Result := __WSAFDIsSet(fd, fdset) <> 0;
  336. end;
  337. function timerisset(const tvp: TTimeVal): Boolean;
  338. begin
  339.   Result := (tvp.tv_sec <> 0) or (tvp.tv_usec <> 0);
  340. end;
  341. procedure timerclear(var tvp: TTimeVal);
  342. begin
  343.   tvp.tv_sec := 0;
  344.   tvp.tv_usec := 0;
  345. end;
  346. function _IO(x, y: DWORD): DWORD;
  347. begin
  348.   Result := IOC_VOID or (x shl 8) or y;
  349. end;
  350. function _IOR(x, y, t: DWORD): DWORD;
  351. begin
  352.   Result := IOC_OUT or ((T and IOCPARM_MASK) shl 16) or (x shl 8) or y;
  353. end;
  354. function _IOW(x, y, t: DWORD): DWORD;
  355. begin
  356.   Result := DWORD(IOC_IN or ((T and IOCPARM_MASK) shl 16) or (x shl 8) or y);
  357. end;
  358. function IN_CLASSA(i: DWORD): Boolean;
  359. begin
  360.   Result := i and DWORD($80000000) = 0;
  361. end;
  362. function IN_CLASSB(i: DWORD): Boolean;
  363. begin
  364.   Result := i and DWORD($C0000000) = DWORD($80000000);
  365. end;
  366. function IN_CLASSC(i: DWORD): Boolean;
  367. begin
  368.   Result := (i and DWORD($e0000000)) = DWORD($C0000000);
  369. end;
  370. function IN_CLASSD(i: DWORD): Boolean;
  371. begin
  372.   Result := (i and DWORD($f0000000)) = DWORD($e0000000);
  373. end;
  374. function IN_MULTICAST(i: DWORD): Boolean;
  375. begin
  376.   Result := IN_CLASSD(i);
  377. end;
  378. function h_errno: Integer;
  379. begin
  380.   Result := WSAGetLastError;
  381. end;
  382. function _WSAIO(x, y: DWORD): DWORD;
  383. begin
  384.   Result := IOC_VOID or x or y;
  385. end;
  386. function _WSAIOR(x, y: DWORD): DWORD;
  387. begin
  388.   Result := IOC_OUT or x or y;
  389. end;
  390. function _WSAIOW(x, y: DWORD): DWORD;
  391. begin
  392.   Result := IOC_IN or x or y;
  393. end;
  394. function _WSAIORW(x, y: DWORD): DWORD;
  395. begin
  396.   Result := IOC_INOUT or x or y;
  397. end;
  398. {$IFDEF DYNAMIC_LINK}
  399. var
  400.   _accept: Pointer;
  401. function accept;
  402. begin
  403.   GetProcedureAddress(_accept, ws2_32, 'accept');
  404.   asm
  405.     mov esp, ebp
  406.     pop ebp
  407.     jmp [_accept]
  408.   end;
  409. end;
  410. {$ELSE}
  411. function accept; external ws2_32 name 'accept';
  412. {$ENDIF DYNAMIC_LINK}
  413. {$IFDEF DYNAMIC_LINK}
  414. var
  415.   _bind: Pointer;
  416. function bind;
  417. begin
  418.   GetProcedureAddress(_bind, ws2_32, 'bind');
  419.   asm
  420.     mov esp, ebp
  421.     pop ebp
  422.     jmp [_bind]
  423.   end;
  424. end;
  425. {$ELSE}
  426. function bind; external ws2_32 name 'bind';
  427. {$ENDIF DYNAMIC_LINK}
  428. {$IFDEF DYNAMIC_LINK}
  429. var
  430.   _closesocket: Pointer;
  431. function closesocket;
  432. begin
  433.   GetProcedureAddress(_closesocket, ws2_32, 'closesocket');
  434.   asm
  435.     mov esp, ebp
  436.     pop ebp
  437.     jmp [_closesocket]
  438.   end;
  439. end;
  440. {$ELSE}
  441. function closesocket; external ws2_32 name 'closesocket';
  442. {$ENDIF DYNAMIC_LINK}
  443. {$IFDEF DYNAMIC_LINK}
  444. var
  445.   _connect: Pointer;
  446. function connect;
  447. begin
  448.   GetProcedureAddress(_connect, ws2_32, 'connect');
  449.   asm
  450.     mov esp, ebp
  451.     pop ebp
  452.     jmp [_connect]
  453.   end;
  454. end;
  455. {$ELSE}
  456. function connect; external ws2_32 name 'connect';
  457. {$ENDIF DYNAMIC_LINK}
  458. {$IFDEF DYNAMIC_LINK}
  459. var
  460.   _ioctlsocket: Pointer;
  461. function ioctlsocket;
  462. begin
  463.   GetProcedureAddress(_ioctlsocket, ws2_32, 'ioctlsocket');
  464.   asm
  465.     mov esp, ebp
  466.     pop ebp
  467.     jmp [_ioctlsocket]
  468.   end;
  469. end;
  470. {$ELSE}
  471. function ioctlsocket; external ws2_32 name 'ioctlsocket';
  472. {$ENDIF DYNAMIC_LINK}
  473. {$IFDEF DYNAMIC_LINK}
  474. var
  475.   _getpeername: Pointer;
  476. function getpeername;
  477. begin
  478.   GetProcedureAddress(_getpeername, ws2_32, 'getpeername');
  479.   asm
  480.     mov esp, ebp
  481.     pop ebp
  482.     jmp [_getpeername]
  483.   end;
  484. end;
  485. {$ELSE}
  486. function getpeername; external ws2_32 name 'getpeername';
  487. {$ENDIF DYNAMIC_LINK}
  488. {$IFDEF DYNAMIC_LINK}
  489. var
  490.   _getsockname: Pointer;
  491. function getsockname;
  492. begin
  493.   GetProcedureAddress(_getsockname, ws2_32, 'getsockname');
  494.   asm
  495.     mov esp, ebp
  496.     pop ebp
  497.     jmp [_getsockname]
  498.   end;
  499. end;
  500. {$ELSE}
  501. function getsockname; external ws2_32 name 'getsockname';
  502. {$ENDIF DYNAMIC_LINK}
  503. {$IFDEF DYNAMIC_LINK}
  504. var
  505.   _getsockopt: Pointer;
  506. function getsockopt;
  507. begin
  508.   GetProcedureAddress(_getsockopt, ws2_32, 'getsockopt');
  509.   asm
  510.     mov esp, ebp
  511.     pop ebp
  512.     jmp [_getsockopt]
  513.   end;
  514. end;
  515. {$ELSE}
  516. function getsockopt; external ws2_32 name 'getsockopt';
  517. {$ENDIF DYNAMIC_LINK}
  518. {$IFDEF DYNAMIC_LINK}
  519. var
  520.   _htonl: Pointer;
  521. function htonl;
  522. begin
  523.   GetProcedureAddress(_htonl, ws2_32, 'htonl');
  524.   asm
  525.     mov esp, ebp
  526.     pop ebp
  527.     jmp [_htonl]
  528.   end;
  529. end;
  530. {$ELSE}
  531. function htonl; external ws2_32 name 'htonl';
  532. {$ENDIF DYNAMIC_LINK}
  533. {$IFDEF DYNAMIC_LINK}
  534. var
  535.   _htons: Pointer;
  536. function htons;
  537. begin
  538.   GetProcedureAddress(_htons, ws2_32, 'htons');
  539.   asm
  540.     mov esp, ebp
  541.     pop ebp
  542.     jmp [_htons]
  543.   end;
  544. end;
  545. {$ELSE}
  546. function htons; external ws2_32 name 'htons';
  547. {$ENDIF DYNAMIC_LINK}
  548. {$IFDEF DYNAMIC_LINK}
  549. var
  550.   _inet_addr: Pointer;
  551. function inet_addr;
  552. begin
  553.   GetProcedureAddress(_inet_addr, ws2_32, 'inet_addr');
  554.   asm
  555.     mov esp, ebp
  556.     pop ebp
  557.     jmp [_inet_addr]
  558.   end;
  559. end;
  560. {$ELSE}
  561. function inet_addr; external ws2_32 name 'inet_addr';
  562. {$ENDIF DYNAMIC_LINK}
  563. {$IFDEF DYNAMIC_LINK}
  564. var
  565.   _inet_ntoa: Pointer;
  566. function inet_ntoa;
  567. begin
  568.   GetProcedureAddress(_inet_ntoa, ws2_32, 'inet_ntoa');
  569.   asm
  570.     mov esp, ebp
  571.     pop ebp
  572.     jmp [_inet_ntoa]
  573.   end;
  574. end;
  575. {$ELSE}
  576. function inet_ntoa; external ws2_32 name 'inet_ntoa';
  577. {$ENDIF DYNAMIC_LINK}
  578. {$IFDEF DYNAMIC_LINK}
  579. var
  580.   _listen: Pointer;
  581. function listen;
  582. begin
  583.   GetProcedureAddress(_listen, ws2_32, 'listen');
  584.   asm
  585.     mov esp, ebp
  586.     pop ebp
  587.     jmp [_listen]
  588.   end;
  589. end;
  590. {$ELSE}
  591. function listen; external ws2_32 name 'listen';
  592. {$ENDIF DYNAMIC_LINK}
  593. {$IFDEF DYNAMIC_LINK}
  594. var
  595.   _ntohl: Pointer;
  596. function ntohl;
  597. begin
  598.   GetProcedureAddress(_ntohl, ws2_32, 'ntohl');
  599.   asm
  600.     mov esp, ebp
  601.     pop ebp
  602.     jmp [_ntohl]
  603.   end;
  604. end;
  605. {$ELSE}
  606. function ntohl; external ws2_32 name 'ntohl';
  607. {$ENDIF DYNAMIC_LINK}
  608. {$IFDEF DYNAMIC_LINK}
  609. var
  610.   _ntohs: Pointer;
  611. function ntohs;
  612. begin
  613.   GetProcedureAddress(_ntohs, ws2_32, 'ntohs');
  614.   asm
  615.     mov esp, ebp
  616.     pop ebp
  617.     jmp [_ntohs]
  618.   end;
  619. end;
  620. {$ELSE}
  621. function ntohs; external ws2_32 name 'ntohs';
  622. {$ENDIF DYNAMIC_LINK}
  623. {$IFDEF DYNAMIC_LINK}
  624. var
  625.   _recv: Pointer;
  626. function recv;
  627. begin
  628.   GetProcedureAddress(_recv, ws2_32, 'recv');
  629.   asm
  630.     mov esp, ebp
  631.     pop ebp
  632.     jmp [_recv]
  633.   end;
  634. end;
  635. {$ELSE}
  636. function recv; external ws2_32 name 'recv';
  637. {$ENDIF DYNAMIC_LINK}
  638. {$IFDEF DYNAMIC_LINK}
  639. var
  640.   _recvfrom: Pointer;
  641. function recvfrom;
  642. begin
  643.   GetProcedureAddress(_recvfrom, ws2_32, 'recvfrom');
  644.   asm
  645.     mov esp, ebp
  646.     pop ebp
  647.     jmp [_recvfrom]
  648.   end;
  649. end;
  650. {$ELSE}
  651. function recvfrom; external ws2_32 name 'recvfrom';
  652. {$ENDIF DYNAMIC_LINK}
  653. {$IFDEF DYNAMIC_LINK}
  654. var
  655.   _select: Pointer;
  656. function select;
  657. begin
  658.   GetProcedureAddress(_select, ws2_32, 'select');
  659.   asm
  660.     mov esp, ebp
  661.     pop ebp
  662.     jmp [_select]
  663.   end;
  664. end;
  665. {$ELSE}
  666. function select; external ws2_32 name 'select';
  667. {$ENDIF DYNAMIC_LINK}
  668. {$IFDEF DYNAMIC_LINK}
  669. var
  670.   _send: Pointer;
  671. function send;
  672. begin
  673.   GetProcedureAddress(_send, ws2_32, 'send');
  674.   asm
  675.     mov esp, ebp
  676.     pop ebp
  677.     jmp [_send]
  678.   end;
  679. end;
  680. {$ELSE}
  681. function send; external ws2_32 name 'send';
  682. {$ENDIF DYNAMIC_LINK}
  683. {$IFDEF DYNAMIC_LINK}
  684. var
  685.   _sendto: Pointer;
  686. function sendto;
  687. begin
  688.   GetProcedureAddress(_sendto, ws2_32, 'sendto');
  689.   asm
  690.     mov esp, ebp
  691.     pop ebp
  692.     jmp [_sendto]
  693.   end;
  694. end;
  695. {$ELSE}
  696. function sendto; external ws2_32 name 'sendto';
  697. {$ENDIF DYNAMIC_LINK}
  698. {$IFDEF DYNAMIC_LINK}
  699. var
  700.   _setsockopt: Pointer;
  701. function setsockopt;
  702. begin
  703.   GetProcedureAddress(_setsockopt, ws2_32, 'setsockopt');
  704.   asm
  705.     mov esp, ebp
  706.     pop ebp
  707.     jmp [_setsockopt]
  708.   end;
  709. end;
  710. {$ELSE}
  711. function setsockopt; external ws2_32 name 'setsockopt';
  712. {$ENDIF DYNAMIC_LINK}
  713. {$IFDEF DYNAMIC_LINK}
  714. var
  715.   _shutdown: Pointer;
  716. function shutdown;
  717. begin
  718.   GetProcedureAddress(_shutdown, ws2_32, 'shutdown');
  719.   asm
  720.     mov esp, ebp
  721.     pop ebp
  722.     jmp [_shutdown]
  723.   end;
  724. end;
  725. {$ELSE}
  726. function shutdown; external ws2_32 name 'shutdown';
  727. {$ENDIF DYNAMIC_LINK}
  728. {$IFDEF DYNAMIC_LINK}
  729. var
  730.   _socket: Pointer;
  731. function socket;
  732. begin
  733.   GetProcedureAddress(_socket, ws2_32, 'socket');
  734.   asm
  735.     mov esp, ebp
  736.     pop ebp
  737.     jmp [_socket]
  738.   end;
  739. end;
  740. {$ELSE}
  741. function socket; external ws2_32 name 'socket';
  742. {$ENDIF DYNAMIC_LINK}
  743. {$IFDEF DYNAMIC_LINK}
  744. var
  745.   _gethostbyaddr: Pointer;
  746. function gethostbyaddr;
  747. begin
  748.   GetProcedureAddress(_gethostbyaddr, ws2_32, 'gethostbyaddr');
  749.   asm
  750.     mov esp, ebp
  751.     pop ebp
  752.     jmp [_gethostbyaddr]
  753.   end;
  754. end;
  755. {$ELSE}
  756. function gethostbyaddr; external ws2_32 name 'gethostbyaddr';
  757. {$ENDIF DYNAMIC_LINK}
  758. {$IFDEF DYNAMIC_LINK}
  759. var
  760.   _gethostbyname: Pointer;
  761. function gethostbyname;
  762. begin
  763.   GetProcedureAddress(_gethostbyname, ws2_32, 'gethostbyname');
  764.   asm
  765.     mov esp, ebp
  766.     pop ebp
  767.     jmp [_gethostbyname]
  768.   end;
  769. end;
  770. {$ELSE}
  771. function gethostbyname; external ws2_32 name 'gethostbyname';
  772. {$ENDIF DYNAMIC_LINK}
  773. {$IFDEF DYNAMIC_LINK}
  774. var
  775.   _gethostname: Pointer;
  776. function gethostname;
  777. begin
  778.   GetProcedureAddress(_gethostname, ws2_32, 'gethostname');
  779.   asm
  780.     mov esp, ebp
  781.     pop ebp
  782.     jmp [_gethostname]
  783.   end;
  784. end;
  785. {$ELSE}
  786. function gethostname; external ws2_32 name 'gethostname';
  787. {$ENDIF DYNAMIC_LINK}
  788. {$IFDEF DYNAMIC_LINK}
  789. var
  790.   _getservbyport: Pointer;
  791. function getservbyport;
  792. begin
  793.   GetProcedureAddress(_getservbyport, ws2_32, 'getservbyport');
  794.   asm
  795.     mov esp, ebp
  796.     pop ebp
  797.     jmp [_getservbyport]
  798.   end;
  799. end;
  800. {$ELSE}
  801. function getservbyport; external ws2_32 name 'getservbyport';
  802. {$ENDIF DYNAMIC_LINK}
  803. {$IFDEF DYNAMIC_LINK}
  804. var
  805.   _getservbyname: Pointer;
  806. function getservbyname;
  807. begin
  808.   GetProcedureAddress(_getservbyname, ws2_32, 'getservbyname');
  809.   asm
  810.     mov esp, ebp
  811.     pop ebp
  812.     jmp [_getservbyname]
  813.   end;
  814. end;
  815. {$ELSE}
  816. function getservbyname; external ws2_32 name 'getservbyname';
  817. {$ENDIF DYNAMIC_LINK}
  818. {$IFDEF DYNAMIC_LINK}
  819. var
  820.   _getprotobynumber: Pointer;
  821. function getprotobynumber;
  822. begin
  823.   GetProcedureAddress(_getprotobynumber, ws2_32, 'getprotobynumber');
  824.   asm
  825.     mov esp, ebp
  826.     pop ebp
  827.     jmp [_getprotobynumber]
  828.   end;
  829. end;
  830. {$ELSE}
  831. function getprotobynumber; external ws2_32 name 'getprotobynumber';
  832. {$ENDIF DYNAMIC_LINK}
  833. {$IFDEF DYNAMIC_LINK}
  834. var
  835.   _getprotobyname: Pointer;
  836. function getprotobyname;
  837. begin
  838.   GetProcedureAddress(_getprotobyname, ws2_32, 'getprotobyname');
  839.   asm
  840.     mov esp, ebp
  841.     pop ebp
  842.     jmp [_getprotobyname]
  843.   end;
  844. end;
  845. {$ELSE}
  846. function getprotobyname; external ws2_32 name 'getprotobyname';
  847. {$ENDIF DYNAMIC_LINK}
  848. {$IFDEF DYNAMIC_LINK}
  849. var
  850.   _WSAStartup: Pointer;
  851. function WSAStartup;
  852. begin
  853.   GetProcedureAddress(_WSAStartup, ws2_32, 'WSAStartup');
  854.   asm
  855.     mov esp, ebp
  856.     pop ebp
  857.     jmp [_WSAStartup]
  858.   end;
  859. end;
  860. {$ELSE}
  861. function WSAStartup; external ws2_32 name 'WSAStartup';
  862. {$ENDIF DYNAMIC_LINK}
  863. {$IFDEF DYNAMIC_LINK}
  864. var
  865.   _WSACleanup: Pointer;
  866. function WSACleanup;
  867. begin
  868.   GetProcedureAddress(_WSACleanup, ws2_32, 'WSACleanup');
  869.   asm
  870.     mov esp, ebp
  871.     pop ebp
  872.     jmp [_WSACleanup]
  873.   end;
  874. end;
  875. {$ELSE}
  876. function WSACleanup; external ws2_32 name 'WSACleanup';
  877. {$ENDIF DYNAMIC_LINK}
  878. {$IFDEF DYNAMIC_LINK}
  879. var
  880.   _WSASetLastError: Pointer;
  881. procedure WSASetLastError;
  882. begin
  883.   GetProcedureAddress(_WSASetLastError, ws2_32, 'WSASetLastError');
  884.   asm
  885.     mov esp, ebp
  886.     pop ebp
  887.     jmp [_WSASetLastError]
  888.   end;
  889. end;
  890. {$ELSE}
  891. procedure WSASetLastError; external ws2_32 name 'WSASetLastError';
  892. {$ENDIF DYNAMIC_LINK}
  893. {$IFDEF DYNAMIC_LINK}
  894. var
  895.   _WSAGetLastError: Pointer;
  896. function WSAGetLastError;
  897. begin
  898.   GetProcedureAddress(_WSAGetLastError, ws2_32, 'WSAGetLastError');
  899.   asm
  900.     mov esp, ebp
  901.     pop ebp
  902.     jmp [_WSAGetLastError]
  903.   end;
  904. end;
  905. {$ELSE}
  906. function WSAGetLastError; external ws2_32 name 'WSAGetLastError';
  907. {$ENDIF DYNAMIC_LINK}
  908. {$IFDEF DYNAMIC_LINK}
  909. var
  910.   _WSAIsBlocking: Pointer;
  911. function WSAIsBlocking;
  912. begin
  913.   GetProcedureAddress(_WSAIsBlocking, ws2_32, 'WSAIsBlocking');
  914.   asm
  915.     mov esp, ebp
  916.     pop ebp
  917.     jmp [_WSAIsBlocking]
  918.   end;
  919. end;
  920. {$ELSE}
  921. function WSAIsBlocking; external ws2_32 name 'WSAIsBlocking';
  922. {$ENDIF DYNAMIC_LINK}
  923. {$IFDEF DYNAMIC_LINK}
  924. var
  925.   _WSAUnhookBlockingHook: Pointer;
  926. function WSAUnhookBlockingHook;
  927. begin
  928.   GetProcedureAddress(_WSAUnhookBlockingHook, ws2_32, 'WSAUnhookBlockingHook');
  929.   asm
  930.     mov esp, ebp
  931.     pop ebp
  932.     jmp [_WSAUnhookBlockingHook]
  933.   end;
  934. end;
  935. {$ELSE}
  936. function WSAUnhookBlockingHook; external ws2_32 name 'WSAUnhookBlockingHook';
  937. {$ENDIF DYNAMIC_LINK}
  938. {$IFDEF DYNAMIC_LINK}
  939. var
  940.   _WSASetBlockingHook: Pointer;
  941. function WSASetBlockingHook;
  942. begin
  943.   GetProcedureAddress(_WSASetBlockingHook, ws2_32, 'WSASetBlockingHook');
  944.   asm
  945.     mov esp, ebp
  946.     pop ebp
  947.     jmp [_WSASetBlockingHook]
  948.   end;
  949. end;
  950. {$ELSE}
  951. function WSASetBlockingHook; external ws2_32 name 'WSASetBlockingHook';
  952. {$ENDIF DYNAMIC_LINK}
  953. {$IFDEF DYNAMIC_LINK}
  954. var
  955.   _WSACancelBlockingCall: Pointer;
  956. function WSACancelBlockingCall;
  957. begin
  958.   GetProcedureAddress(_WSACancelBlockingCall, ws2_32, 'WSACancelBlockingCall');
  959.   asm
  960.     mov esp, ebp
  961.     pop ebp
  962.     jmp [_WSACancelBlockingCall]
  963.   end;
  964. end;
  965. {$ELSE}
  966. function WSACancelBlockingCall; external ws2_32 name 'WSACancelBlockingCall';
  967. {$ENDIF DYNAMIC_LINK}
  968. {$IFDEF DYNAMIC_LINK}
  969. var
  970.   _WSAAsyncGetServByName: Pointer;
  971. function WSAAsyncGetServByName;
  972. begin
  973.   GetProcedureAddress(_WSAAsyncGetServByName, ws2_32, 'WSAAsyncGetServByName');
  974.   asm
  975.     mov esp, ebp
  976.     pop ebp
  977.     jmp [_WSAAsyncGetServByName]
  978.   end;
  979. end;
  980. {$ELSE}
  981. function WSAAsyncGetServByName; external ws2_32 name 'WSAAsyncGetServByName';
  982. {$ENDIF DYNAMIC_LINK}
  983. {$IFDEF DYNAMIC_LINK}
  984. var
  985.   _WSAAsyncGetServByPort: Pointer;
  986. function WSAAsyncGetServByPort;
  987. begin
  988.   GetProcedureAddress(_WSAAsyncGetServByPort, ws2_32, 'WSAAsyncGetServByPort');
  989.   asm
  990.     mov esp, ebp
  991.     pop ebp
  992.     jmp [_WSAAsyncGetServByPort]
  993.   end;
  994. end;
  995. {$ELSE}
  996. function WSAAsyncGetServByPort; external ws2_32 name 'WSAAsyncGetServByPort';
  997. {$ENDIF DYNAMIC_LINK}
  998. {$IFDEF DYNAMIC_LINK}
  999. var
  1000.   _WSAAsyncGetProtoByName: Pointer;
  1001. function WSAAsyncGetProtoByName;
  1002. begin
  1003.   GetProcedureAddress(_WSAAsyncGetProtoByName, ws2_32, 'WSAAsyncGetProtoByName');
  1004.   asm
  1005.     mov esp, ebp
  1006.     pop ebp
  1007.     jmp [_WSAAsyncGetProtoByName]
  1008.   end;
  1009. end;
  1010. {$ELSE}
  1011. function WSAAsyncGetProtoByName; external ws2_32 name 'WSAAsyncGetProtoByName';
  1012. {$ENDIF DYNAMIC_LINK}
  1013. {$IFDEF DYNAMIC_LINK}
  1014. var
  1015.   _WSAAsyncGetProtoByNumber: Pointer;
  1016. function WSAAsyncGetProtoByNumber;
  1017. begin
  1018.   GetProcedureAddress(_WSAAsyncGetProtoByNumber, ws2_32, 'WSAAsyncGetProtoByNumber');
  1019.   asm
  1020.     mov esp, ebp
  1021.     pop ebp
  1022.     jmp [_WSAAsyncGetProtoByNumber]
  1023.   end;
  1024. end;
  1025. {$ELSE}
  1026. function WSAAsyncGetProtoByNumber; external ws2_32 name 'WSAAsyncGetProtoByNumber';
  1027. {$ENDIF DYNAMIC_LINK}
  1028. {$IFDEF DYNAMIC_LINK}
  1029. var
  1030.   _WSAAsyncGetHostByName: Pointer;
  1031. function WSAAsyncGetHostByName;
  1032. begin
  1033.   GetProcedureAddress(_WSAAsyncGetHostByName, ws2_32, 'WSAAsyncGetHostByName');
  1034.   asm
  1035.     mov esp, ebp
  1036.     pop ebp
  1037.     jmp [_WSAAsyncGetHostByName]
  1038.   end;
  1039. end;
  1040. {$ELSE}
  1041. function WSAAsyncGetHostByName; external ws2_32 name 'WSAAsyncGetHostByName';
  1042. {$ENDIF DYNAMIC_LINK}
  1043. {$IFDEF DYNAMIC_LINK}
  1044. var
  1045.   _WSAAsyncGetHostByAddr: Pointer;
  1046. function WSAAsyncGetHostByAddr;
  1047. begin
  1048.   GetProcedureAddress(_WSAAsyncGetHostByAddr, ws2_32, 'WSAAsyncGetHostByAddr');
  1049.   asm
  1050.     mov esp, ebp
  1051.     pop ebp
  1052.     jmp [_WSAAsyncGetHostByAddr]
  1053.   end;
  1054. end;
  1055. {$ELSE}
  1056. function WSAAsyncGetHostByAddr; external ws2_32 name 'WSAAsyncGetHostByAddr';
  1057. {$ENDIF DYNAMIC_LINK}
  1058. {$IFDEF DYNAMIC_LINK}
  1059. var
  1060.   _WSACancelAsyncRequest: Pointer;
  1061. function WSACancelAsyncRequest;
  1062. begin
  1063.   GetProcedureAddress(_WSACancelAsyncRequest, ws2_32, 'WSACancelAsyncRequest');
  1064.   asm
  1065.     mov esp, ebp
  1066.     pop ebp
  1067.     jmp [_WSACancelAsyncRequest]
  1068.   end;
  1069. end;
  1070. {$ELSE}
  1071. function WSACancelAsyncRequest; external ws2_32 name 'WSACancelAsyncRequest';
  1072. {$ENDIF DYNAMIC_LINK}
  1073. {$IFDEF DYNAMIC_LINK}
  1074. var
  1075.   _WSAAsyncSelect: Pointer;
  1076. function WSAAsyncSelect;
  1077. begin
  1078.   GetProcedureAddress(_WSAAsyncSelect, ws2_32, 'WSAAsyncSelect');
  1079.   asm
  1080.     mov esp, ebp
  1081.     pop ebp
  1082.     jmp [_WSAAsyncSelect]
  1083.   end;
  1084. end;
  1085. {$ELSE}
  1086. function WSAAsyncSelect; external ws2_32 name 'WSAAsyncSelect';
  1087. {$ENDIF DYNAMIC_LINK}
  1088. {$IFDEF DYNAMIC_LINK}
  1089. var
  1090.   _WSAAccept: Pointer;
  1091. function WSAAccept;
  1092. begin
  1093.   GetProcedureAddress(_WSAAccept, ws2_32, 'WSAAccept');
  1094.   asm
  1095.     mov esp, ebp
  1096.     pop ebp
  1097.     jmp [_WSAAccept]
  1098.   end;
  1099. end;
  1100. {$ELSE}
  1101. function WSAAccept; external ws2_32 name 'WSAAccept';
  1102. {$ENDIF DYNAMIC_LINK}
  1103. {$IFDEF DYNAMIC_LINK}
  1104. var
  1105.   _WSACloseEvent: Pointer;
  1106. function WSACloseEvent;
  1107. begin
  1108.   GetProcedureAddress(_WSACloseEvent, ws2_32, 'WSACloseEvent');
  1109.   asm
  1110.     mov esp, ebp
  1111.     pop ebp
  1112.     jmp [_WSACloseEvent]
  1113.   end;
  1114. end;
  1115. {$ELSE}
  1116. function WSACloseEvent; external ws2_32 name 'WSACloseEvent';
  1117. {$ENDIF DYNAMIC_LINK}
  1118. {$IFDEF DYNAMIC_LINK}
  1119. var
  1120.   _WSAConnect: Pointer;
  1121. function WSAConnect;
  1122. begin
  1123.   GetProcedureAddress(_WSAConnect, ws2_32, 'WSAConnect');
  1124.   asm
  1125.     mov esp, ebp
  1126.     pop ebp
  1127.     jmp [_WSAConnect]
  1128.   end;
  1129. end;
  1130. {$ELSE}
  1131. function WSAConnect; external ws2_32 name 'WSAConnect';
  1132. {$ENDIF DYNAMIC_LINK}
  1133. {$IFDEF DYNAMIC_LINK}
  1134. var
  1135.   _WSACreateEvent: Pointer;
  1136. function WSACreateEvent;
  1137. begin
  1138.   GetProcedureAddress(_WSACreateEvent, ws2_32, 'WSACreateEvent');
  1139.   asm
  1140.     mov esp, ebp
  1141.     pop ebp
  1142.     jmp [_WSACreateEvent]
  1143.   end;
  1144. end;
  1145. {$ELSE}
  1146. function WSACreateEvent; external ws2_32 name 'WSACreateEvent';
  1147. {$ENDIF DYNAMIC_LINK}
  1148. {$IFDEF DYNAMIC_LINK}
  1149. var
  1150.   _WSADuplicateSocketA: Pointer;
  1151. function WSADuplicateSocketA;
  1152. begin
  1153.   GetProcedureAddress(_WSADuplicateSocketA, ws2_32, 'WSADuplicateSocketA');
  1154.   asm
  1155.     mov esp, ebp
  1156.     pop ebp
  1157.     jmp [_WSADuplicateSocketA]
  1158.   end;
  1159. end;
  1160. {$ELSE}
  1161. function WSADuplicateSocketA; external ws2_32 name 'WSADuplicateSocketA';
  1162. {$ENDIF DYNAMIC_LINK}
  1163. {$IFDEF DYNAMIC_LINK}
  1164. var
  1165.   _WSADuplicateSocketW: Pointer;
  1166. function WSADuplicateSocketW;
  1167. begin
  1168.   GetProcedureAddress(_WSADuplicateSocketW, ws2_32, 'WSADuplicateSocketW');
  1169.   asm
  1170.     mov esp, ebp
  1171.     pop ebp
  1172.     jmp [_WSADuplicateSocketW]
  1173.   end;
  1174. end;
  1175. {$ELSE}
  1176. function WSADuplicateSocketW; external ws2_32 name 'WSADuplicateSocketW';
  1177. {$ENDIF DYNAMIC_LINK}
  1178. {$IFDEF UNICODE}
  1179. {$IFDEF DYNAMIC_LINK}
  1180. var
  1181.   _WSADuplicateSocket: Pointer;
  1182. function WSADuplicateSocket;
  1183. begin
  1184.   GetProcedureAddress(_WSADuplicateSocket, ws2_32, 'WSADuplicateSocketW');
  1185.   asm
  1186.     mov esp, ebp
  1187.     pop ebp
  1188.     jmp [_WSADuplicateSocket]
  1189.   end;
  1190. end;
  1191. {$ELSE}
  1192. function WSADuplicateSocket; external ws2_32 name 'WSADuplicateSocketW';
  1193. {$ENDIF DYNAMIC_LINK}
  1194. {$ELSE}
  1195. {$IFDEF DYNAMIC_LINK}
  1196. var
  1197.   _WSADuplicateSocket: Pointer;
  1198. function WSADuplicateSocket;
  1199. begin
  1200.   GetProcedureAddress(_WSADuplicateSocket, ws2_32, 'WSADuplicateSocketA');
  1201.   asm
  1202.     mov esp, ebp
  1203.     pop ebp
  1204.     jmp [_WSADuplicateSocket]
  1205.   end;
  1206. end;
  1207. {$ELSE}
  1208. function WSADuplicateSocket; external ws2_32 name 'WSADuplicateSocketA';
  1209. {$ENDIF DYNAMIC_LINK}
  1210. {$ENDIF}
  1211. {$IFDEF DYNAMIC_LINK}
  1212. var
  1213.   _WSAEnumNetworkEvents: Pointer;
  1214. function WSAEnumNetworkEvents;
  1215. begin
  1216.   GetProcedureAddress(_WSAEnumNetworkEvents, ws2_32, 'WSAEnumNetworkEvents');
  1217.   asm
  1218.     mov esp, ebp
  1219.     pop ebp
  1220.     jmp [_WSAEnumNetworkEvents]
  1221.   end;
  1222. end;
  1223. {$ELSE}
  1224. function WSAEnumNetworkEvents; external ws2_32 name 'WSAEnumNetworkEvents';
  1225. {$ENDIF DYNAMIC_LINK}
  1226. {$IFDEF DYNAMIC_LINK}
  1227. var
  1228.   _WSAEnumProtocolsA: Pointer;
  1229. function WSAEnumProtocolsA;
  1230. begin
  1231.   GetProcedureAddress(_WSAEnumProtocolsA, ws2_32, 'WSAEnumProtocolsA');
  1232.   asm
  1233.     mov esp, ebp
  1234.     pop ebp
  1235.     jmp [_WSAEnumProtocolsA]
  1236.   end;
  1237. end;
  1238. {$ELSE}
  1239. function WSAEnumProtocolsA; external ws2_32 name 'WSAEnumProtocolsA';
  1240. {$ENDIF DYNAMIC_LINK}
  1241. {$IFDEF DYNAMIC_LINK}
  1242. var
  1243.   _WSAEnumProtocolsW: Pointer;
  1244. function WSAEnumProtocolsW;
  1245. begin
  1246.   GetProcedureAddress(_WSAEnumProtocolsW, ws2_32, 'WSAEnumProtocolsW');
  1247.   asm
  1248.     mov esp, ebp
  1249.     pop ebp
  1250.     jmp [_WSAEnumProtocolsW]
  1251.   end;
  1252. end;
  1253. {$ELSE}
  1254. function WSAEnumProtocolsW; external ws2_32 name 'WSAEnumProtocolsW';
  1255. {$ENDIF DYNAMIC_LINK}
  1256. {$IFDEF UNICODE}
  1257. {$IFDEF DYNAMIC_LINK}
  1258. var
  1259.   _WSAEnumProtocols: Pointer;
  1260. function WSAEnumProtocols;
  1261. begin
  1262.   GetProcedureAddress(_WSAEnumProtocols, ws2_32, 'WSAEnumProtocolsW');
  1263.   asm
  1264.     mov esp, ebp
  1265.     pop ebp
  1266.     jmp [_WSAEnumProtocols]
  1267.   end;
  1268. end;
  1269. {$ELSE}
  1270. function WSAEnumProtocols; external ws2_32 name 'WSAEnumProtocolsW';
  1271. {$ENDIF DYNAMIC_LINK}
  1272. {$ELSE}
  1273. {$IFDEF DYNAMIC_LINK}
  1274. var
  1275.   _WSAEnumProtocols: Pointer;
  1276. function WSAEnumProtocols;
  1277. begin
  1278.   GetProcedureAddress(_WSAEnumProtocols, ws2_32, 'WSAEnumProtocolsA');
  1279.   asm
  1280.     mov esp, ebp
  1281.     pop ebp
  1282.     jmp [_WSAEnumProtocols]
  1283.   end;
  1284. end;
  1285. {$ELSE}
  1286. function WSAEnumProtocols; external ws2_32 name 'WSAEnumProtocolsA';
  1287. {$ENDIF DYNAMIC_LINK}
  1288. {$ENDIF}
  1289. {$IFDEF DYNAMIC_LINK}
  1290. var
  1291.   _WSAEventSelect: Pointer;
  1292. function WSAEventSelect;
  1293. begin
  1294.   GetProcedureAddress(_WSAEventSelect, ws2_32, 'WSAEventSelect');
  1295.   asm
  1296.     mov esp, ebp
  1297.     pop ebp
  1298.     jmp [_WSAEventSelect]
  1299.   end;
  1300. end;
  1301. {$ELSE}
  1302. function WSAEventSelect; external ws2_32 name 'WSAEventSelect';
  1303. {$ENDIF DYNAMIC_LINK}
  1304. {$IFDEF DYNAMIC_LINK}
  1305. var
  1306.   _WSAGetOverlappedResult: Pointer;
  1307. function WSAGetOverlappedResult;
  1308. begin
  1309.   GetProcedureAddress(_WSAGetOverlappedResult, ws2_32, 'WSAGetOverlappedResult');
  1310.   asm
  1311.     mov esp, ebp
  1312.     pop ebp
  1313.     jmp [_WSAGetOverlappedResult]
  1314.   end;
  1315. end;
  1316. {$ELSE}
  1317. function WSAGetOverlappedResult; external ws2_32 name 'WSAGetOverlappedResult';
  1318. {$ENDIF DYNAMIC_LINK}
  1319. {$IFDEF DYNAMIC_LINK}
  1320. var
  1321.   _WSAGetQOSByName: Pointer;
  1322. function WSAGetQOSByName;
  1323. begin
  1324.   GetProcedureAddress(_WSAGetQOSByName, ws2_32, 'WSAGetQOSByName');
  1325.   asm
  1326.     mov esp, ebp
  1327.     pop ebp
  1328.     jmp [_WSAGetQOSByName]
  1329.   end;
  1330. end;
  1331. {$ELSE}
  1332. function WSAGetQOSByName; external ws2_32 name 'WSAGetQOSByName';
  1333. {$ENDIF DYNAMIC_LINK}
  1334. {$IFDEF DYNAMIC_LINK}
  1335. var
  1336.   _WSAHtonl: Pointer;
  1337. function WSAHtonl;
  1338. begin
  1339.   GetProcedureAddress(_WSAHtonl, ws2_32, 'WSAHtonl');
  1340.   asm
  1341.     mov esp, ebp
  1342.     pop ebp
  1343.     jmp [_WSAHtonl]
  1344.   end;
  1345. end;
  1346. {$ELSE}
  1347. function WSAHtonl; external ws2_32 name 'WSAHtonl';
  1348. {$ENDIF DYNAMIC_LINK}
  1349. {$IFDEF DYNAMIC_LINK}
  1350. var
  1351.   _WSAHtons: Pointer;
  1352. function WSAHtons;
  1353. begin
  1354.   GetProcedureAddress(_WSAHtons, ws2_32, 'WSAHtons');
  1355.   asm
  1356.     mov esp, ebp
  1357.     pop ebp
  1358.     jmp [_WSAHtons]
  1359.   end;
  1360. end;
  1361. {$ELSE}
  1362. function WSAHtons; external ws2_32 name 'WSAHtons';
  1363. {$ENDIF DYNAMIC_LINK}
  1364. {$IFDEF DYNAMIC_LINK}
  1365. var
  1366.   _WSAIoctl: Pointer;
  1367. function WSAIoctl;
  1368. begin
  1369.   GetProcedureAddress(_WSAIoctl, ws2_32, 'WSAIoctl');
  1370.   asm
  1371.     mov esp, ebp
  1372.     pop ebp
  1373.     jmp [_WSAIoctl]
  1374.   end;
  1375. end;
  1376. {$ELSE}
  1377. function WSAIoctl; external ws2_32 name 'WSAIoctl';
  1378. {$ENDIF DYNAMIC_LINK}
  1379. {$IFDEF DYNAMIC_LINK}
  1380. var
  1381.   _WSAJoinLeaf: Pointer;
  1382. function WSAJoinLeaf;
  1383. begin
  1384.   GetProcedureAddress(_WSAJoinLeaf, ws2_32, 'WSAJoinLeaf');
  1385.   asm
  1386.     mov esp, ebp
  1387.     pop ebp
  1388.     jmp [_WSAJoinLeaf]
  1389.   end;
  1390. end;
  1391. {$ELSE}
  1392. function WSAJoinLeaf; external ws2_32 name 'WSAJoinLeaf';
  1393. {$ENDIF DYNAMIC_LINK}
  1394. {$IFDEF DYNAMIC_LINK}
  1395. var
  1396.   _WSANtohl: Pointer;
  1397. function WSANtohl;
  1398. begin
  1399.   GetProcedureAddress(_WSANtohl, ws2_32, 'WSANtohl');
  1400.   asm
  1401.     mov esp, ebp
  1402.     pop ebp
  1403.     jmp [_WSANtohl]
  1404.   end;
  1405. end;
  1406. {$ELSE}
  1407. function WSANtohl; external ws2_32 name 'WSANtohl';
  1408. {$ENDIF DYNAMIC_LINK}
  1409. {$IFDEF DYNAMIC_LINK}
  1410. var
  1411.   _WSANtohs: Pointer;
  1412. function WSANtohs;
  1413. begin
  1414.   GetProcedureAddress(_WSANtohs, ws2_32, 'WSANtohs');
  1415.   asm
  1416.     mov esp, ebp
  1417.     pop ebp
  1418.     jmp [_WSANtohs]
  1419.   end;
  1420. end;
  1421. {$ELSE}
  1422. function WSANtohs; external ws2_32 name 'WSANtohs';
  1423. {$ENDIF DYNAMIC_LINK}
  1424. {$IFDEF DYNAMIC_LINK}
  1425. var
  1426.   _WSARecv: Pointer;
  1427. function WSARecv;
  1428. begin
  1429.   GetProcedureAddress(_WSARecv, ws2_32, 'WSARecv');
  1430.   asm
  1431.     mov esp, ebp
  1432.     pop ebp
  1433.     jmp [_WSARecv]
  1434.   end;
  1435. end;
  1436. {$ELSE}
  1437. function WSARecv; external ws2_32 name 'WSARecv';
  1438. {$ENDIF DYNAMIC_LINK}
  1439. {$IFDEF DYNAMIC_LINK}
  1440. var
  1441.   _WSARecvDisconnect: Pointer;
  1442. function WSARecvDisconnect;
  1443. begin
  1444.   GetProcedureAddress(_WSARecvDisconnect, ws2_32, 'WSARecvDisconnect');
  1445.   asm
  1446.     mov esp, ebp
  1447.     pop ebp
  1448.     jmp [_WSARecvDisconnect]
  1449.   end;
  1450. end;
  1451. {$ELSE}
  1452. function WSARecvDisconnect; external ws2_32 name 'WSARecvDisconnect';
  1453. {$ENDIF DYNAMIC_LINK}
  1454. {$IFDEF DYNAMIC_LINK}
  1455. var
  1456.   _WSARecvFrom: Pointer;
  1457. function WSARecvFrom;
  1458. begin
  1459.   GetProcedureAddress(_WSARecvFrom, ws2_32, 'WSARecvFrom');
  1460.   asm
  1461.     mov esp, ebp
  1462.     pop ebp
  1463.     jmp [_WSARecvFrom]
  1464.   end;
  1465. end;
  1466. {$ELSE}
  1467. function WSARecvFrom; external ws2_32 name 'WSARecvFrom';
  1468. {$ENDIF DYNAMIC_LINK}
  1469. {$IFDEF DYNAMIC_LINK}
  1470. var
  1471.   _WSAResetEvent: Pointer;
  1472. function WSAResetEvent;
  1473. begin
  1474.   GetProcedureAddress(_WSAResetEvent, ws2_32, 'WSAResetEvent');
  1475.   asm
  1476.     mov esp, ebp
  1477.     pop ebp
  1478.     jmp [_WSAResetEvent]
  1479.   end;
  1480. end;
  1481. {$ELSE}
  1482. function WSAResetEvent; external ws2_32 name 'WSAResetEvent';
  1483. {$ENDIF DYNAMIC_LINK}
  1484. {$IFDEF DYNAMIC_LINK}
  1485. var
  1486.   _WSASend: Pointer;
  1487. function WSASend;
  1488. begin
  1489.   GetProcedureAddress(_WSASend, ws2_32, 'WSASend');
  1490.   asm
  1491.     mov esp, ebp
  1492.     pop ebp
  1493.     jmp [_WSASend]
  1494.   end;
  1495. end;
  1496. {$ELSE}
  1497. function WSASend; external ws2_32 name 'WSASend';
  1498. {$ENDIF DYNAMIC_LINK}
  1499. {$IFDEF DYNAMIC_LINK}
  1500. var
  1501.   _WSASendDisconnect: Pointer;
  1502. function WSASendDisconnect;
  1503. begin
  1504.   GetProcedureAddress(_WSASendDisconnect, ws2_32, 'WSASendDisconnect');
  1505.   asm
  1506.     mov esp, ebp
  1507.     pop ebp
  1508.     jmp [_WSASendDisconnect]
  1509.   end;
  1510. end;
  1511. {$ELSE}
  1512. function WSASendDisconnect; external ws2_32 name 'WSASendDisconnect';
  1513. {$ENDIF DYNAMIC_LINK}
  1514. {$IFDEF DYNAMIC_LINK}
  1515. var
  1516.   _WSASendTo: Pointer;
  1517. function WSASendTo;
  1518. begin
  1519.   GetProcedureAddress(_WSASendTo, ws2_32, 'WSASendTo');
  1520.   asm
  1521.     mov esp, ebp
  1522.     pop ebp
  1523.     jmp [_WSASendTo]
  1524.   end;
  1525. end;
  1526. {$ELSE}
  1527. function WSASendTo; external ws2_32 name 'WSASendTo';
  1528. {$ENDIF DYNAMIC_LINK}
  1529. {$IFDEF DYNAMIC_LINK}
  1530. var
  1531.   _WSASetEvent: Pointer;
  1532. function WSASetEvent;
  1533. begin
  1534.   GetProcedureAddress(_WSASetEvent, ws2_32, 'WSASetEvent');
  1535.   asm
  1536.     mov esp, ebp
  1537.     pop ebp
  1538.     jmp [_WSASetEvent]
  1539.   end;
  1540. end;
  1541. {$ELSE}
  1542. function WSASetEvent; external ws2_32 name 'WSASetEvent';
  1543. {$ENDIF DYNAMIC_LINK}
  1544. {$IFDEF DYNAMIC_LINK}
  1545. var
  1546.   _WSASocketA: Pointer;
  1547. function WSASocketA;
  1548. begin
  1549.   GetProcedureAddress(_WSASocketA, ws2_32, 'WSASocketA');
  1550.   asm
  1551.     mov esp, ebp
  1552.     pop ebp
  1553.     jmp [_WSASocketA]
  1554.   end;
  1555. end;
  1556. {$ELSE}
  1557. function WSASocketA; external ws2_32 name 'WSASocketA';
  1558. {$ENDIF DYNAMIC_LINK}
  1559. {$IFDEF DYNAMIC_LINK}
  1560. var
  1561.   _WSASocketW: Pointer;
  1562. function WSASocketW;
  1563. begin
  1564.   GetProcedureAddress(_WSASocketW, ws2_32, 'WSASocketW');
  1565.   asm
  1566.     mov esp, ebp
  1567.     pop ebp
  1568.     jmp [_WSASocketW]
  1569.   end;
  1570. end;
  1571. {$ELSE}
  1572. function WSASocketW; external ws2_32 name 'WSASocketW';
  1573. {$ENDIF DYNAMIC_LINK}
  1574. {$IFDEF UNICODE}
  1575. {$IFDEF DYNAMIC_LINK}
  1576. var
  1577.   _WSASocket: Pointer;
  1578. function WSASocket;
  1579. begin
  1580.   GetProcedureAddress(_WSASocket, ws2_32, 'WSASocketW');
  1581.   asm
  1582.     mov esp, ebp
  1583.     pop ebp
  1584.     jmp [_WSASocket]
  1585.   end;
  1586. end;
  1587. {$ELSE}
  1588. function WSASocket; external ws2_32 name 'WSASocketW';
  1589. {$ENDIF DYNAMIC_LINK}
  1590. {$ELSE}
  1591. {$IFDEF DYNAMIC_LINK}
  1592. var
  1593.   _WSASocket: Pointer;
  1594. function WSASocket;
  1595. begin
  1596.   GetProcedureAddress(_WSASocket, ws2_32, 'WSASocketA');
  1597.   asm
  1598.     mov esp, ebp
  1599.     pop ebp
  1600.     jmp [_WSASocket]
  1601.   end;
  1602. end;
  1603. {$ELSE}
  1604. function WSASocket; external ws2_32 name 'WSASocketA';
  1605. {$ENDIF DYNAMIC_LINK}
  1606. {$ENDIF}
  1607. {$IFDEF DYNAMIC_LINK}
  1608. var
  1609.   _WSAWaitForMultipleEvents: Pointer;
  1610. function WSAWaitForMultipleEvents;
  1611. begin
  1612.   GetProcedureAddress(_WSAWaitForMultipleEvents, ws2_32, 'WSAWaitForMultipleEvents');
  1613.   asm
  1614.     mov esp, ebp
  1615.     pop ebp
  1616.     jmp [_WSAWaitForMultipleEvents]
  1617.   end;
  1618. end;
  1619. {$ELSE}
  1620. function WSAWaitForMultipleEvents; external ws2_32 name 'WSAWaitForMultipleEvents';
  1621. {$ENDIF DYNAMIC_LINK}
  1622. {$IFDEF DYNAMIC_LINK}
  1623. var
  1624.   _WSAAddressToStringA: Pointer;
  1625. function WSAAddressToStringA;
  1626. begin
  1627.   GetProcedureAddress(_WSAAddressToStringA, ws2_32, 'WSAAddressToStringA');
  1628.   asm
  1629.     mov esp, ebp
  1630.     pop ebp
  1631.     jmp [_WSAAddressToStringA]
  1632.   end;
  1633. end;
  1634. {$ELSE}
  1635. function WSAAddressToStringA; external ws2_32 name 'WSAAddressToStringA';
  1636. {$ENDIF DYNAMIC_LINK}
  1637. {$IFDEF DYNAMIC_LINK}
  1638. var
  1639.   _WSAAddressToStringW: Pointer;
  1640. function WSAAddressToStringW;
  1641. begin
  1642.   GetProcedureAddress(_WSAAddressToStringW, ws2_32, 'WSAAddressToStringW');
  1643.   asm
  1644.     mov esp, ebp
  1645.     pop ebp
  1646.     jmp [_WSAAddressToStringW]
  1647.   end;
  1648. end;
  1649. {$ELSE}
  1650. function WSAAddressToStringW; external ws2_32 name 'WSAAddressToStringW';
  1651. {$ENDIF DYNAMIC_LINK}
  1652. {$IFDEF UNICODE}
  1653. {$IFDEF DYNAMIC_LINK}
  1654. var
  1655.   _WSAAddressToString: Pointer;
  1656. function WSAAddressToString;
  1657. begin
  1658.   GetProcedureAddress(_WSAAddressToString, ws2_32, 'WSAAddressToStringW');
  1659.   asm
  1660.     mov esp, ebp
  1661.     pop ebp
  1662.     jmp [_WSAAddressToString]
  1663.   end;
  1664. end;
  1665. {$ELSE}
  1666. function WSAAddressToString; external ws2_32 name 'WSAAddressToStringW';
  1667. {$ENDIF DYNAMIC_LINK}
  1668. {$ELSE}
  1669. {$IFDEF DYNAMIC_LINK}
  1670. var
  1671.   _WSAAddressToString: Pointer;
  1672. function WSAAddressToString;
  1673. begin
  1674.   GetProcedureAddress(_WSAAddressToString, ws2_32, 'WSAAddressToStringA');
  1675.   asm
  1676.     mov esp, ebp
  1677.     pop ebp
  1678.     jmp [_WSAAddressToString]
  1679.   end;
  1680. end;
  1681. {$ELSE}
  1682. function WSAAddressToString; external ws2_32 name 'WSAAddressToStringA';
  1683. {$ENDIF DYNAMIC_LINK}
  1684. {$ENDIF}
  1685. {$IFDEF DYNAMIC_LINK}
  1686. var
  1687.   _WSAStringToAddressA: Pointer;
  1688. function WSAStringToAddressA;
  1689. begin
  1690.   GetProcedureAddress(_WSAStringToAddressA, ws2_32, 'WSAStringToAddressA');
  1691.   asm
  1692.     mov esp, ebp
  1693.     pop ebp
  1694.     jmp [_WSAStringToAddressA]
  1695.   end;
  1696. end;
  1697. {$ELSE}
  1698. function WSAStringToAddressA; external ws2_32 name 'WSAStringToAddressA';
  1699. {$ENDIF DYNAMIC_LINK}
  1700. {$IFDEF DYNAMIC_LINK}
  1701. var
  1702.   _WSAStringToAddressW: Pointer;
  1703. function WSAStringToAddressW;
  1704. begin
  1705.   GetProcedureAddress(_WSAStringToAddressW, ws2_32, 'WSAStringToAddressW');
  1706.   asm
  1707.     mov esp, ebp
  1708.     pop ebp
  1709.     jmp [_WSAStringToAddressW]
  1710.   end;
  1711. end;
  1712. {$ELSE}
  1713. function WSAStringToAddressW; external ws2_32 name 'WSAStringToAddressW';
  1714. {$ENDIF DYNAMIC_LINK}
  1715. {$IFDEF UNICODE}
  1716. {$IFDEF DYNAMIC_LINK}
  1717. var
  1718.   _WSAStringToAddress: Pointer;
  1719. function WSAStringToAddress;
  1720. begin
  1721.   GetProcedureAddress(_WSAStringToAddress, ws2_32, 'WSAStringToAddressW');
  1722.   asm
  1723.     mov esp, ebp
  1724.     pop ebp
  1725.     jmp [_WSAStringToAddress]
  1726.   end;
  1727. end;
  1728. {$ELSE}
  1729. function WSAStringToAddress; external ws2_32 name 'WSAStringToAddressW';
  1730. {$ENDIF DYNAMIC_LINK}
  1731. {$ELSE}
  1732. {$IFDEF DYNAMIC_LINK}
  1733. var
  1734.   _WSAStringToAddress: Pointer;
  1735. function WSAStringToAddress;
  1736. begin
  1737.   GetProcedureAddress(_WSAStringToAddress, ws2_32, 'WSAStringToAddressA');
  1738.   asm
  1739.     mov esp, ebp
  1740.     pop ebp
  1741.     jmp [_WSAStringToAddress]
  1742.   end;
  1743. end;
  1744. {$ELSE}
  1745. function WSAStringToAddress; external ws2_32 name 'WSAStringToAddressA';
  1746. {$ENDIF DYNAMIC_LINK}
  1747. {$ENDIF}
  1748. {$IFDEF DYNAMIC_LINK}
  1749. var
  1750.   _WSALookupServiceBeginA: Pointer;
  1751. function WSALookupServiceBeginA;
  1752. begin
  1753.   GetProcedureAddress(_WSALookupServiceBeginA, ws2_32, 'WSALookupServiceBeginA');
  1754.   asm
  1755.     mov esp, ebp
  1756.     pop ebp
  1757.     jmp [_WSALookupServiceBeginA]
  1758.   end;
  1759. end;
  1760. {$ELSE}
  1761. function WSALookupServiceBeginA; external ws2_32 name 'WSALookupServiceBeginA';
  1762. {$ENDIF DYNAMIC_LINK}
  1763. {$IFDEF DYNAMIC_LINK}
  1764. var
  1765.   _WSALookupServiceBeginW: Pointer;
  1766. function WSALookupServiceBeginW;
  1767. begin
  1768.   GetProcedureAddress(_WSALookupServiceBeginW, ws2_32, 'WSALookupServiceBeginW');
  1769.   asm
  1770.     mov esp, ebp
  1771.     pop ebp
  1772.     jmp [_WSALookupServiceBeginW]
  1773.   end;
  1774. end;
  1775. {$ELSE}
  1776. function WSALookupServiceBeginW; external ws2_32 name 'WSALookupServiceBeginW';
  1777. {$ENDIF DYNAMIC_LINK}
  1778. {$IFDEF UNICODE}
  1779. {$IFDEF DYNAMIC_LINK}
  1780. var
  1781.   _WSALookupServiceBegin: Pointer;
  1782. function WSALookupServiceBegin;
  1783. begin
  1784.   GetProcedureAddress(_WSALookupServiceBegin, ws2_32, 'WSALookupServiceBeginW');
  1785.   asm
  1786.     mov esp, ebp
  1787.     pop ebp
  1788.     jmp [_WSALookupServiceBegin]
  1789.   end;
  1790. end;
  1791. {$ELSE}
  1792. function WSALookupServiceBegin; external ws2_32 name 'WSALookupServiceBeginW';
  1793. {$ENDIF DYNAMIC_LINK}
  1794. {$ELSE}
  1795. {$IFDEF DYNAMIC_LINK}
  1796. var
  1797.   _WSALookupServiceBegin: Pointer;
  1798. function WSALookupServiceBegin;
  1799. begin
  1800.   GetProcedureAddress(_WSALookupServiceBegin, ws2_32, 'WSALookupServiceBeginA');
  1801.   asm
  1802.     mov esp, ebp
  1803.     pop ebp
  1804.     jmp [_WSALookupServiceBegin]
  1805.   end;
  1806. end;
  1807. {$ELSE}
  1808. function WSALookupServiceBegin; external ws2_32 name 'WSALookupServiceBeginA';
  1809. {$ENDIF DYNAMIC_LINK}
  1810. {$ENDIF}
  1811. {$IFDEF DYNAMIC_LINK}
  1812. var
  1813.   _WSALookupServiceNextA: Pointer;
  1814. function WSALookupServiceNextA;
  1815. begin
  1816.   GetProcedureAddress(_WSALookupServiceNextA, ws2_32, 'WSALookupServiceNextA');
  1817.   asm
  1818.     mov esp, ebp
  1819.     pop ebp
  1820.     jmp [_WSALookupServiceNextA]
  1821.   end;
  1822. end;
  1823. {$ELSE}
  1824. function WSALookupServiceNextA; external ws2_32 name 'WSALookupServiceNextA';
  1825. {$ENDIF DYNAMIC_LINK}
  1826. {$IFDEF DYNAMIC_LINK}
  1827. var
  1828.   _WSALookupServiceNextW: Pointer;
  1829. function WSALookupServiceNextW;
  1830. begin
  1831.   GetProcedureAddress(_WSALookupServiceNextW, ws2_32, 'WSALookupServiceNextW');
  1832.   asm
  1833.     mov esp, ebp
  1834.     pop ebp
  1835.     jmp [_WSALookupServiceNextW]
  1836.   end;
  1837. end;
  1838. {$ELSE}
  1839. function WSALookupServiceNextW; external ws2_32 name 'WSALookupServiceNextW';
  1840. {$ENDIF DYNAMIC_LINK}
  1841. {$IFDEF UNICODE}
  1842. {$IFDEF DYNAMIC_LINK}
  1843. var
  1844.   _WSALookupServiceNext: Pointer;
  1845. function WSALookupServiceNext;
  1846. begin
  1847.   GetProcedureAddress(_WSALookupServiceNext, ws2_32, 'WSALookupServiceNextW');
  1848.   asm
  1849.     mov esp, ebp
  1850.     pop ebp
  1851.     jmp [_WSALookupServiceNext]
  1852.   end;
  1853. end;
  1854. {$ELSE}
  1855. function WSALookupServiceNext; external ws2_32 name 'WSALookupServiceNextW';
  1856. {$ENDIF DYNAMIC_LINK}
  1857. {$ELSE}
  1858. {$IFDEF DYNAMIC_LINK}
  1859. var
  1860.   _WSALookupServiceNext: Pointer;
  1861. function WSALookupServiceNext;
  1862. begin
  1863.   GetProcedureAddress(_WSALookupServiceNext, ws2_32, 'WSALookupServiceNextA');
  1864.   asm
  1865.     mov esp, ebp
  1866.     pop ebp
  1867.     jmp [_WSALookupServiceNext]
  1868.   end;
  1869. end;
  1870. {$ELSE}
  1871. function WSALookupServiceNext; external ws2_32 name 'WSALookupServiceNextA';
  1872. {$ENDIF DYNAMIC_LINK}
  1873. {$ENDIF}
  1874. {$IFDEF DYNAMIC_LINK}
  1875. var
  1876.   _WSANSPIoctl: Pointer;
  1877. function WSANSPIoctl;
  1878. begin
  1879.   GetProcedureAddress(_WSANSPIoctl, ws2_32, 'WSANSPIoctl');
  1880.   asm
  1881.     mov esp, ebp
  1882.     pop ebp
  1883.     jmp [_WSANSPIoctl]
  1884.   end;
  1885. end;
  1886. {$ELSE}
  1887. function WSANSPIoctl; external ws2_32 name 'WSANSPIoctl';
  1888. {$ENDIF DYNAMIC_LINK}
  1889. {$IFDEF DYNAMIC_LINK}
  1890. var
  1891.   _WSALookupServiceEnd: Pointer;
  1892. function WSALookupServiceEnd;
  1893. begin
  1894.   GetProcedureAddress(_WSALookupServiceEnd, ws2_32, 'WSALookupServiceEnd');
  1895.   asm
  1896.     mov esp, ebp
  1897.     pop ebp
  1898.     jmp [_WSALookupServiceEnd]
  1899.   end;
  1900. end;
  1901. {$ELSE}
  1902. function WSALookupServiceEnd; external ws2_32 name 'WSALookupServiceEnd';
  1903. {$ENDIF DYNAMIC_LINK}
  1904. {$IFDEF DYNAMIC_LINK}
  1905. var
  1906.   _WSAInstallServiceClassA: Pointer;
  1907. function WSAInstallServiceClassA;
  1908. begin
  1909.   GetProcedureAddress(_WSAInstallServiceClassA, ws2_32, 'WSAInstallServiceClassA');
  1910.   asm
  1911.     mov esp, ebp
  1912.     pop ebp
  1913.     jmp [_WSAInstallServiceClassA]
  1914.   end;
  1915. end;
  1916. {$ELSE}
  1917. function WSAInstallServiceClassA; external ws2_32 name 'WSAInstallServiceClassA';
  1918. {$ENDIF DYNAMIC_LINK}
  1919. {$IFDEF DYNAMIC_LINK}
  1920. var
  1921.   _WSAInstallServiceClassW: Pointer;
  1922. function WSAInstallServiceClassW;
  1923. begin
  1924.   GetProcedureAddress(_WSAInstallServiceClassW, ws2_32, 'WSAInstallServiceClassW');
  1925.   asm
  1926.     mov esp, ebp
  1927.     pop ebp
  1928.     jmp [_WSAInstallServiceClassW]
  1929.   end;
  1930. end;
  1931. {$ELSE}
  1932. function WSAInstallServiceClassW; external ws2_32 name 'WSAInstallServiceClassW';
  1933. {$ENDIF DYNAMIC_LINK}
  1934. {$IFDEF UNICODE}
  1935. {$IFDEF DYNAMIC_LINK}
  1936. var
  1937.   _WSAInstallServiceClass: Pointer;
  1938. function WSAInstallServiceClass;
  1939. begin
  1940.   GetProcedureAddress(_WSAInstallServiceClass, ws2_32, 'WSAInstallServiceClassW');
  1941.   asm
  1942.     mov esp, ebp
  1943.     pop ebp
  1944.     jmp [_WSAInstallServiceClass]
  1945.   end;
  1946. end;
  1947. {$ELSE}
  1948. function WSAInstallServiceClass; external ws2_32 name 'WSAInstallServiceClassW';
  1949. {$ENDIF DYNAMIC_LINK}
  1950. {$ELSE}
  1951. {$IFDEF DYNAMIC_LINK}
  1952. var
  1953.   _WSAInstallServiceClass: Pointer;
  1954. function WSAInstallServiceClass;
  1955. begin
  1956.   GetProcedureAddress(_WSAInstallServiceClass, ws2_32, 'WSAInstallServiceClassA');
  1957.   asm
  1958.     mov esp, ebp
  1959.     pop ebp
  1960.     jmp [_WSAInstallServiceClass]
  1961.   end;
  1962. end;
  1963. {$ELSE}
  1964. function WSAInstallServiceClass; external ws2_32 name 'WSAInstallServiceClassA';
  1965. {$ENDIF DYNAMIC_LINK}
  1966. {$ENDIF}
  1967. {$IFDEF DYNAMIC_LINK}
  1968. var
  1969.   _WSARemoveServiceClass: Pointer;
  1970. function WSARemoveServiceClass;
  1971. begin
  1972.   GetProcedureAddress(_WSARemoveServiceClass, ws2_32, 'WSARemoveServiceClass');
  1973.   asm
  1974.     mov esp, ebp
  1975.     pop ebp
  1976.     jmp [_WSARemoveServiceClass]
  1977.   end;
  1978. end;
  1979. {$ELSE}
  1980. function WSARemoveServiceClass; external ws2_32 name 'WSARemoveServiceClass';
  1981. {$ENDIF DYNAMIC_LINK}
  1982. {$IFDEF DYNAMIC_LINK}
  1983. var
  1984.   _WSAGetServiceClassInfoA: Pointer;
  1985. function WSAGetServiceClassInfoA;
  1986. begin
  1987.   GetProcedureAddress(_WSAGetServiceClassInfoA, ws2_32, 'WSAGetServiceClassInfoA');
  1988.   asm
  1989.     mov esp, ebp
  1990.     pop ebp
  1991.     jmp [_WSAGetServiceClassInfoA]
  1992.   end;
  1993. end;
  1994. {$ELSE}
  1995. function WSAGetServiceClassInfoA; external ws2_32 name 'WSAGetServiceClassInfoA';
  1996. {$ENDIF DYNAMIC_LINK}
  1997. {$IFDEF DYNAMIC_LINK}
  1998. var
  1999.   _WSAGetServiceClassInfoW: Pointer;
  2000. function WSAGetServiceClassInfoW;
  2001. begin
  2002.   GetProcedureAddress(_WSAGetServiceClassInfoW, ws2_32, 'WSAGetServiceClassInfoW');
  2003.   asm
  2004.     mov esp, ebp
  2005.     pop ebp
  2006.     jmp [_WSAGetServiceClassInfoW]
  2007.   end;
  2008. end;
  2009. {$ELSE}
  2010. function WSAGetServiceClassInfoW; external ws2_32 name 'WSAGetServiceClassInfoW';
  2011. {$ENDIF DYNAMIC_LINK}
  2012. {$IFDEF UNICODE}
  2013. {$IFDEF DYNAMIC_LINK}
  2014. var
  2015.   _WSAGetServiceClassInfo: Pointer;
  2016. function WSAGetServiceClassInfo;
  2017. begin
  2018.   GetProcedureAddress(_WSAGetServiceClassInfo, ws2_32, 'WSAGetServiceClassInfoW');
  2019.   asm
  2020.     mov esp, ebp
  2021.     pop ebp
  2022.     jmp [_WSAGetServiceClassInfo]
  2023.   end;
  2024. end;
  2025. {$ELSE}
  2026. function WSAGetServiceClassInfo; external ws2_32 name 'WSAGetServiceClassInfoW';
  2027. {$ENDIF DYNAMIC_LINK}
  2028. {$ELSE}
  2029. {$IFDEF DYNAMIC_LINK}
  2030. var
  2031.   _WSAGetServiceClassInfo: Pointer;
  2032. function WSAGetServiceClassInfo;
  2033. begin
  2034.   GetProcedureAddress(_WSAGetServiceClassInfo, ws2_32, 'WSAGetServiceClassInfoA');
  2035.   asm
  2036.     mov esp, ebp
  2037.     pop ebp
  2038.     jmp [_WSAGetServiceClassInfo]
  2039.   end;
  2040. end;
  2041. {$ELSE}
  2042. function WSAGetServiceClassInfo; external ws2_32 name 'WSAGetServiceClassInfoA';
  2043. {$ENDIF DYNAMIC_LINK}
  2044. {$ENDIF}
  2045. {$IFDEF DYNAMIC_LINK}
  2046. var
  2047.   _WSAEnumNameSpaceProvidersA: Pointer;
  2048. function WSAEnumNameSpaceProvidersA;
  2049. begin
  2050.   GetProcedureAddress(_WSAEnumNameSpaceProvidersA, ws2_32, 'WSAEnumNameSpaceProvidersA');
  2051.   asm
  2052.     mov esp, ebp
  2053.     pop ebp
  2054.     jmp [_WSAEnumNameSpaceProvidersA]
  2055.   end;
  2056. end;
  2057. {$ELSE}
  2058. function WSAEnumNameSpaceProvidersA; external ws2_32 name 'WSAEnumNameSpaceProvidersA';
  2059. {$ENDIF DYNAMIC_LINK}
  2060. {$IFDEF DYNAMIC_LINK}
  2061. var
  2062.   _WSAEnumNameSpaceProvidersW: Pointer;
  2063. function WSAEnumNameSpaceProvidersW;
  2064. begin
  2065.   GetProcedureAddress(_WSAEnumNameSpaceProvidersW, ws2_32, 'WSAEnumNameSpaceProvidersW');
  2066.   asm
  2067.     mov esp, ebp
  2068.     pop ebp
  2069.     jmp [_WSAEnumNameSpaceProvidersW]
  2070.   end;
  2071. end;
  2072. {$ELSE}
  2073. function WSAEnumNameSpaceProvidersW; external ws2_32 name 'WSAEnumNameSpaceProvidersW';
  2074. {$ENDIF DYNAMIC_LINK}
  2075. {$IFDEF UNICODE}
  2076. {$IFDEF DYNAMIC_LINK}
  2077. var
  2078.   _WSAEnumNameSpaceProviders: Pointer;
  2079. function WSAEnumNameSpaceProviders;
  2080. begin
  2081.   GetProcedureAddress(_WSAEnumNameSpaceProviders, ws2_32, 'WSAEnumNameSpaceProvidersW');
  2082.   asm
  2083.     mov esp, ebp
  2084.     pop ebp
  2085.     jmp [_WSAEnumNameSpaceProviders]
  2086.   end;
  2087. end;
  2088. {$ELSE}
  2089. function WSAEnumNameSpaceProviders; external ws2_32 name 'WSAEnumNameSpaceProvidersW';
  2090. {$ENDIF DYNAMIC_LINK}
  2091. {$ELSE}
  2092. {$IFDEF DYNAMIC_LINK}
  2093. var
  2094.   _WSAEnumNameSpaceProviders: Pointer;
  2095. function WSAEnumNameSpaceProviders;
  2096. begin
  2097.   GetProcedureAddress(_WSAEnumNameSpaceProviders, ws2_32, 'WSAEnumNameSpaceProvidersA');
  2098.   asm
  2099.     mov esp, ebp
  2100.     pop ebp
  2101.     jmp [_WSAEnumNameSpaceProviders]
  2102.   end;
  2103. end;
  2104. {$ELSE}
  2105. function WSAEnumNameSpaceProviders; external ws2_32 name 'WSAEnumNameSpaceProvidersA';
  2106. {$ENDIF DYNAMIC_LINK}
  2107. {$ENDIF}
  2108. {$IFDEF DYNAMIC_LINK}
  2109. var
  2110.   _WSAGetServClassNameByClassIdA: Pointer;
  2111. function WSAGetServiceClassNameByClassIdA;
  2112. begin
  2113.   GetProcedureAddress(_WSAGetServClassNameByClassIdA, ws2_32, 'WSAGetServiceClassNameByClassIdA');
  2114.   asm
  2115.     mov esp, ebp
  2116.     pop ebp
  2117.     jmp [_WSAGetServClassNameByClassIdA]
  2118.   end;
  2119. end;
  2120. {$ELSE}
  2121. function WSAGetServiceClassNameByClassIdA; external ws2_32 name 'WSAGetServiceClassNameByClassIdA';
  2122. {$ENDIF DYNAMIC_LINK}
  2123. {$IFDEF DYNAMIC_LINK}
  2124. var
  2125.   _WSAGetServClassNameByClassIdW: Pointer;
  2126. function WSAGetServiceClassNameByClassIdW;
  2127. begin
  2128.   GetProcedureAddress(_WSAGetServClassNameByClassIdW, ws2_32, 'WSAGetServiceClassNameByClassIdW');
  2129.   asm
  2130.     mov esp, ebp
  2131.     pop ebp
  2132.     jmp [_WSAGetServClassNameByClassIdW]
  2133.   end;
  2134. end;
  2135. {$ELSE}
  2136. function WSAGetServiceClassNameByClassIdW; external ws2_32 name 'WSAGetServiceClassNameByClassIdW';
  2137. {$ENDIF DYNAMIC_LINK}
  2138. {$IFDEF UNICODE}
  2139. {$IFDEF DYNAMIC_LINK}
  2140. var
  2141.   _WSAGetServClassNameByClassId: Pointer;
  2142. function WSAGetServiceClassNameByClassId;
  2143. begin
  2144.   GetProcedureAddress(_WSAGetServClassNameByClassId, ws2_32, 'WSAGetServiceClassNameByClassIdW');
  2145.   asm
  2146.     mov esp, ebp
  2147.     pop ebp
  2148.     jmp [_WSAGetServClassNameByClassId]
  2149.   end;
  2150. end;
  2151. {$ELSE}
  2152. function WSAGetServiceClassNameByClassId; external ws2_32 name 'WSAGetServiceClassNameByClassIdW';
  2153. {$ENDIF DYNAMIC_LINK}
  2154. {$ELSE}
  2155. {$IFDEF DYNAMIC_LINK}
  2156. var
  2157.   _WSAGetServClassNameByClassId: Pointer;
  2158. function WSAGetServiceClassNameByClassId;
  2159. begin
  2160.   GetProcedureAddress(_WSAGetServClassNameByClassId, ws2_32, 'WSAGetServiceClassNameByClassIdA');
  2161.   asm
  2162.     mov esp, ebp
  2163.     pop ebp
  2164.     jmp [_WSAGetServClassNameByClassId]
  2165.   end;
  2166. end;
  2167. {$ELSE}
  2168. function WSAGetServiceClassNameByClassId; external ws2_32 name 'WSAGetServiceClassNameByClassIdA';
  2169. {$ENDIF DYNAMIC_LINK}
  2170. {$ENDIF}
  2171. {$IFDEF DYNAMIC_LINK}
  2172. var
  2173.   _WSASetServiceA: Pointer;
  2174. function WSASetServiceA;
  2175. begin
  2176.   GetProcedureAddress(_WSASetServiceA, ws2_32, 'WSASetServiceA');
  2177.   asm
  2178.     mov esp, ebp
  2179.     pop ebp
  2180.     jmp [_WSASetServiceA]
  2181.   end;
  2182. end;
  2183. {$ELSE}
  2184. function WSASetServiceA; external ws2_32 name 'WSASetServiceA';
  2185. {$ENDIF DYNAMIC_LINK}
  2186. {$IFDEF DYNAMIC_LINK}
  2187. var
  2188.   _WSASetServiceW: Pointer;
  2189. function WSASetServiceW;
  2190. begin
  2191.   GetProcedureAddress(_WSASetServiceW, ws2_32, 'WSASetServiceW');
  2192.   asm
  2193.     mov esp, ebp
  2194.     pop ebp
  2195.     jmp [_WSASetServiceW]
  2196.   end;
  2197. end;
  2198. {$ELSE}
  2199. function WSASetServiceW; external ws2_32 name 'WSASetServiceW';
  2200. {$ENDIF DYNAMIC_LINK}
  2201. {$IFDEF UNICODE}
  2202. {$IFDEF DYNAMIC_LINK}
  2203. var
  2204.   _WSASetService: Pointer;
  2205. function WSASetService;
  2206. begin
  2207.   GetProcedureAddress(_WSASetService, ws2_32, 'WSASetServiceW');
  2208.   asm
  2209.     mov esp, ebp
  2210.     pop ebp
  2211.     jmp [_WSASetService]
  2212.   end;
  2213. end;
  2214. {$ELSE}
  2215. function WSASetService; external ws2_32 name 'WSASetServiceW';
  2216. {$ENDIF DYNAMIC_LINK}
  2217. {$ELSE}
  2218. {$IFDEF DYNAMIC_LINK}
  2219. var
  2220.   _WSASetService: Pointer;
  2221. function WSASetService;
  2222. begin
  2223.   GetProcedureAddress(_WSASetService, ws2_32, 'WSASetServiceA');
  2224.   asm
  2225.     mov esp, ebp
  2226.     pop ebp
  2227.     jmp [_WSASetService]
  2228.   end;
  2229. end;
  2230. {$ELSE}
  2231. function WSASetService; external ws2_32 name 'WSASetServiceA';
  2232. {$ENDIF DYNAMIC_LINK}
  2233. {$ENDIF}
  2234. {$IFDEF DYNAMIC_LINK}
  2235. var
  2236.   _WSAProviderConfigChange: Pointer;
  2237. function WSAProviderConfigChange;
  2238. begin
  2239.   GetProcedureAddress(_WSAProviderConfigChange, ws2_32, 'WSAProviderConfigChange');
  2240.   asm
  2241.     mov esp, ebp
  2242.     pop ebp
  2243.     jmp [_WSAProviderConfigChange]
  2244.   end;
  2245. end;
  2246. {$ELSE}
  2247. function WSAProviderConfigChange; external ws2_32 name 'WSAProviderConfigChange';
  2248. {$ENDIF DYNAMIC_LINK}
  2249. function WSAMAKEASYNCREPLY(buflen, error: WORD): DWORD;
  2250. begin
  2251.   Result := MAKELONG(buflen, error);
  2252. end;
  2253. function WSAMAKESELECTREPLY(event, error: WORD): DWORD;
  2254. begin
  2255.   Result := MAKELONG(event, error);
  2256. end;
  2257. function WSAGETASYNCBUFLEN(lParam: DWORD): WORD;
  2258. begin
  2259.   Result := LOWORD(lParam);
  2260. end;
  2261. function WSAGETASYNCERROR(lParam: DWORD): WORD;
  2262. begin
  2263.   Result := HIWORD(lParam);
  2264. end;
  2265. function WSAGETSELECTEVENT(lParam: DWORD): WORD;
  2266. begin
  2267.   Result := LOWORD(lParam);
  2268. end;
  2269. function WSAGETSELECTERROR(lParam: DWORD): WORD;
  2270. begin
  2271.   Result := HIWORD(lParam);
  2272. end;
  2273. end.