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