Hello, All!

Нарисовал UDF, возвращающую имя хоста по IP. Проверил в тестовом приложении 
(грузит dll, находит точку входа в функцию, по IP возвращает имя хоста 
(использует  gethostbyaddr). В приложении все ОК, в контексте сервера всегда 
возвращает пустую строку. Сервер - FB 2.1. Текст UDF:
--------------------------------------------------------------------------------
unit HostName;

interface

uses
  SysUtils, Classes, Winsock;

implementation

threadvar
  ThreadResultString: Array[0..255] of char;

// declare external function HostByIP
//   cstring(256)
//   returns cstring(256)
//   entry_point 'HostByIP'
//   module_name 'HostUDF.dll';
function HostByIP(var IPAddr: PChar): PChar; cdecl; export;
var
  SockAddrIn: TSockAddrIn;
  HostEnt: PHostEnt;
  WSAData: TWSAData;
begin
  WSAStartup($101, WSAData);
  SockAddrIn.sin_addr.s_addr := inet_addr(IPAddr);
  HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
  if HostEnt <> nil then
    result := StrCopy(ThreadResultString, Hostent^.h_name)
  else
  begin
    result := StrCopy(ThreadResultString, '');
  end;
end;

exports
  HostByIP;

end.
--------------------------------------------------------------------------------
Чего ему не хватает?
-- 
Удач
Alexander A. Venikov, Tobolsk, Russia 


Ответить