Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Вниз

получение ай пи с помощью библиотеки   Найти похожие ветки 

 
Leksiy ©   (2004-10-07 14:57) [0]

function GetLocalIP: PChar; stdcall;
 const WSVer = $101;
 var
  wsaData: TWSAData;
  P: PHostEnt;
  Buf: array [0..127] of Char;
  Begin
    Result := "";
    if WSAStartup(WSVer, wsaData) = 0 then
      begin
        if GetHostName(@Buf, 128) = 0 then
          begin
            P := GetHostByName(@Buf);
            if P <> nil then
              begin
                Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
              end;
          end;
        WSACleanup;
      end;
  End;
exports GetLocalIP;

вот такое лежит в библиотеке вызывается правильно
уже предлогали ... прото топик куда то улетел :( что надо выделить память ... не понимаю подочто и зачем ... объясните плиз ... функция если не в библиотеке работает правильно почему то не выходит именно с библиотекой


 
Григорьев Антон ©   (2004-10-07 16:56) [1]

Под результат надо выделить память. А то непонятно куда копируется, затирает какие-то полезные данные. И зачем здесь вообще PChar? Сделайте результат типом string, а результат работы Inet_NToA преобразуйте к нему с помощью StrPas.


 
XProger ©   (2004-10-07 19:24) [2]

Вот как у меня:

function NET_GetLocalIP: PChar; stdcall;
var
Error     : DWORD;
HostEntry : PHostEnt;
Address   : In_Addr;
Buffer    : array [0..63] of Char;
begin
GetHostName(Buffer, SizeOf(Buffer));
HostEntry := gethostbyname(Buffer);
Error := GetLastError;
if Error = 0 then
begin
Address := PInAddr(HostEntry^.h_addr_list^)^;
Result  := inet_ntoa(Address);
end
else
Result:="XXX.XXX.XXX.XXX";
end;

function NET_GetExternalIP: PChar; stdcall;
type
 TaPInAddr = Array[0..10] of PInAddr;
 PaPInAddr = ^TaPInAddr;
var
 phe           : PHostEnt;
 p             : PaPInAddr;
 Buffer        : array[0..63] of Char;
 i             : Byte;
begin
Result := "";
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe = nil then
Exit;
p := PaPInAddr(phe^.h_addr_list);
i := 0;
while p^[i] <> nil do
begin
Result := inet_ntoa(p^[I]^);
Inc(i);
end;
end;


 
Leksiy ©   (2004-10-08 10:37) [3]

всем спасибо то что у меня было прекрасно работает :) ... Григорьев Антон специально для вас ... библиотеки плохо работаю с типом стринг ... :) так бы не парился... кстати ничего там не трется :) топик кил


 
sniknik ©   (2004-10-08 11:09) [4]

> всем спасибо то что у меня было прекрасно работает :) ...
ну да конечно, теперь работает... ;)

> Григорьев Антон специально для вас ... библиотеки плохо работаю с типом стринг ... :)
с типом стринг замечательно работают, только менеджер памяти должен быть общим с программой. (читай предупреждения когда dll создаеш)

> топик кил
еще одно поспешное решение. ;о) здесь так не бывает. закончат только когда всем надоест.


 
Григорьев Антон ©   (2004-10-08 11:41) [5]

Ребята, ну почитайте вы MSDN, прежде чем писать код!

The string returned by inet_ntoa resides in memory that is allocated by Windows Sockets. The application should not make any assumptions about the way in which the memory is allocated. The data is guaranteed to be valid until the next Windows Sockets function call within the same thread—but no longer.

Вольный перевод на русский язык: память, которую функция inet_ntoa резервирует для строки, осводождается при вызове следующей функции сокетной библиотеки из данной нити. Это означает, что буфер, который создан функцией inet_ntoa, можно использовать только для того, чтобы быстренько переписать из него данные в постоянный буфер и забыть о его существовании. А не передавать этот буфер дальше по цепочке, как вы делаете.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.034 c
1-1102078078
СергА
2004-12-03 15:47
2004.12.19
отладка исходного кода Delphi


14-1101623392
SergP.
2004-11-28 09:29
2004.12.19
P-IV &amp; Oracle


1-1101483554
VasRog
2004-11-26 18:39
2004.12.19
Сортировка большого массива


14-1101886371
AlexG
2004-12-01 10:32
2004.12.19
Что скажете? Покупать его за 5000р.?


10-1072519836
Guest
2003-12-27 13:10
2004.12.19
TAO Developer s Guide





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский