lws2tcpip.pp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. unit lws2tcpip;
  2. {$mode delphi}
  3. interface
  4. uses
  5. WinSock2;
  6. const
  7. ws2tcpip = 'ws2_32.dll';
  8. AI_PASSIVE = $1;
  9. AI_CANONNAME = $2;
  10. AI_NUMERICHOST = $4;
  11. type
  12. LPADDRINFO = ^addrinfo;
  13. addrinfo = record
  14. ai_flags: Integer;
  15. ai_family: Integer;
  16. ai_socktype: Integer;
  17. ai_protocol: Integer;
  18. ai_addrlen: size_t;
  19. ai_canonname: PChar;
  20. ai_addr: PSockAddr;
  21. ai_next: LPADDRINFO;
  22. end;
  23. TAddrInfo = addrinfo;
  24. PAddrInfo = LPADDRINFO;
  25. function getaddrinfo(nodename, servname: PChar; hints: PAddrInfo; var res: PAddrInfo): Integer; stdcall;
  26. procedure freeaddrinfo(ai: PAddrInfo); stdcall;
  27. implementation
  28. uses
  29. dynlibs;
  30. type
  31. TGetAddrInfoFunc = function (nodename, servname: PChar; hints: PAddrInfo; var res: PAddrInfo): Integer; stdcall;
  32. TFreeAddrInfoProc = procedure (ai: PAddrInfo); stdcall;
  33. var
  34. _lib: TLibHandle;
  35. _getaddrinfo: TGetAddrInfoFunc;
  36. _freeaddrinfo: TFreeAddrInfoProc;
  37. function getaddrinfo(nodename, servname: PChar; hints: PAddrInfo;
  38. var res: PAddrInfo): Integer; stdcall;
  39. begin
  40. _getaddrinfo(nodename, servname, hints, res);
  41. end;
  42. procedure freeaddrinfo(ai: PAddrInfo); stdcall;
  43. begin
  44. end;
  45. initialization
  46. _lib := LoadLibrary(ws2tcpip);
  47. _getaddrinfo := GetProcedureAddress(_lib, 'getaddrinfo');
  48. _freeaddrinfo := GetProcedureAddress(_lib, 'freeaddrinfo');
  49. finalization
  50. UnloadLibrary(_lib);
  51. end.