![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Invalid pointer operation при пинге - в чем засада? [D7, WinXP]
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]отладчик тебе в руки - и вперед !