Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Invalid pointer operation при пинге - в чем засада? [D7, WinXP]


Страницы:   1 2

fylhtq ©   (2004-07-06 14:52:00) 

Написал простенькую програмку пингующую заданный хост, а она непонятно по какому принципу вылитает с ошибкой:

[B]Project zzz.exe raised exception class EInvalidPointer with message "Invalid pointer operation"[/B]

причем определенные хосты пингует без проблем, а другие ни в какую.
ps Эта ошибка выскакивает по окончанию выполнения пингующей процедуры.

procedure TForm1.PingClick(Sender: TObject);
Var
    name:PAnsiChar;
    i:Integer;
begin
    If not(CheckHostName) Then Exit; // проверка правильности написания имени хоста

    hIP := IcmpCreateFile();
    GetMem( pIpe, sizeof(icmp_echo_reply) + sizeof(pingBuffer));
    pIpe.Data := @pingBuffer;
    pIpe.DataSize := sizeof(pingBuffer);
    wVersionRequested := MakeWord(1,1);
    error := WSAStartup(wVersionRequested,lwsaData);
    name:= PChar(Form1.HostName.text);
    pHostEn := gethostbyname(name);
    destAddress := PInAddr(pHostEn^.h_addr_list^)^;
    // пингуем
    listbox1.items.Add('пингуем '+pHostEn^.h_name+' ['+inet_ntoa(destAddress)+
                       '] размер пакета '+IntToStr(PingSize)+' байт:');

   for i:=1 to PingCounts {глобальная integer} do
   begin
     Application.ProcessMessages;
     If StopFlag Then
     Begin
          StopFlag:=False;
          Break
     End;
     IcmpSendEcho(hIP,destAddress.S_addr,@pingBuffer,PingSize,Nil,pIpe,
                  sizeof(icmp_echo_reply)+PingSize,5000);
     error := GetLastError();
     if (error <> 0) then listbox1.items.Add(IntToStr(LoByte(LoWord(pIpe^.Address)))+'.'+
                             IntToStr(HiByte(LoWord(pIpe^.Address)))+'.'+
                             IntToStr(LoByte(HiWord(pIpe^.Address)))+'.'+
                             IntToStr(HiByte(HiWord(pIpe^.Address)))+'   '+
                             'Узел недоступен')
     ELSE listbox1.items.Add(IntToStr(LoByte(LoWord(pIpe^.Address)))+'.'+
                             IntToStr(HiByte(LoWord(pIpe^.Address)))+'.'+
                             IntToStr(LoByte(HiWord(pIpe^.Address)))+'.'+
                             IntToStr(HiByte(HiWord(pIpe^.Address)))+'   '+
                             'Время отклика: '+floattostr(pIpe.RTTime)+' мс')
   end;
   IcmpCloseHandle(hIP);
   WSACleanup();
   FreeMem(pIpe);
   end;


fylhtq   (2004-07-06 16:25:00) [21]

Ну хоть копать то в какую сторону?


Anatoly Podgoretsky   (2004-07-06 15:47:00) [22]

Информации недостаточно, много неизвестных переменных, управляемых извне. Так что только отладчикю


fylhtq   (2004-07-06 15:38:00) [23]

Большое спасибо, очень продуктивный ответ...


Digitman   (2004-07-06 15:34:00) [24]

отладчик тебе в руки - и вперед !


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо