UDF в контексте сервера возвращает пустую строку

2008-04-23 Пенетрантность Alexander A. Venikov
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 




Re: UDF в контексте сервера возвращает пустую строку

2008-04-23 Пенетрантность PEAKTOP

 uses
   SysUtils, Classes 


1) Попробуй переделать без использования этих юнитов: все нужные
структуры и функции Ctrl+C и в своем юните Ctrl+V.

2) Кстати, приблуд всяких в стиле FastMM в Delphi не стоит ?

Re: UDF в контексте сервера возвращает пустую строку

2008-04-23 Пенетрантность Alexander Nagumanov


Нарисовал UDF, возвращающую имя хоста по IP. Проверил в тестовом 
приложении

(грузит dll, находит точку входа в функцию, по IP возвращает имя хоста
(использует  gethostbyaddr). В приложении все ОК, в контексте сервера 
всегда

возвращает пустую строку. Сервер - FB 2.1. Текст UDF:


...

Чего ему не хватает?
ib_util? 





Re: UDF в контексте сервера возвращает пустую строку

2008-04-23 Пенетрантность Vlad Khorsun



function HostByIP(var IPAddr: PChar): PChar; cdecl; export;


var IPAddr: PChar - var тут зачем ?


 WSAStartup($101, WSAData);


   Кто будет проверять результат ?

   Вообще говоря, этот вызов не нужен, разве что для embedded, но раз уж вызвал 
- где
вызов WSACleanup ?

--
Хорсун Влад

PS я обещал тебе не помогать, помню... 





Re: UDF в контексте сервера возвращает пустую строку

2008-04-23 Пенетрантность Vlad Khorsun


Alexander A. Venikov ...


Hello, Vlad!
You wrote  on Wed, 23 Apr 2008 15:22:44 +0300:


?? function HostByIP(var IPAddr: PChar): PChar; cdecl; export;

VK var IPAddr: PChar - var тут зачем ?
Это оно, спасибо. Не совсем пока понял, почему... ссылка по ссылке?


   Указатель на указатель, с точки зрения физики процесса.

--
Хорсун Влад