如果想帮忙,请帮到底。(100分)

  • 主题发起人 主题发起人 zurich
  • 开始时间 开始时间
Z

zurich

Unregistered / Unconfirmed
GUEST, unregistred user!
我抄了一个ping程序,当然这东西很老套。也同样出了一个很老套的问题,我没办法解决。
每次运行:
try
IcmpSendEcho(hICMP, FIPAddress, pReqData, Length(MyString),@IPOpt, pIPE, BufferSize, FTimeOut);
if pReqData^ = pIPE^.Options.OptionsData^ then
Memo1.Lines.Add(PChar(PingEdit.Text) + ' ' + IntToStr(pIPE^.DataSize) + ' ' +IntToStr(pIPE^.RTT));
except
Memo1.Lines.Add('Cant resolve host!');
FreeMem(pRevData);
FreeMem(pIPE);
Exit;
end;
运行到 if pReqData^ = pIPE^.Options.OptionsData^ then 时出现异常提示:
project project1.exe raised exception class EAccessviolation with message
'access violation at address 0048530E in module 'project1.exe',read of address
00000000,'process stopped, Use step or run to continue!
请大家看一下,分数不太多。谁给了我最直接的答案,给出原因,100分给谁。
 
这段程序写得不严密,
IcmpSendEcho(hICMP, FIPAddress, pReqData, Length(MyString),@IPOpt, pIPE, BufferSize, FTimeOut);
这一个函数调用不成功
pReqData^ 和 pIPE^.Options.OptionsData^还未填入正确的值,所以会地址错误.
应该判断一下
if IcmpSendEcho(hICMP, FIPAddress, pReqData, Length(MyString),@IPOpt, pIPE, BufferSize, FTimeOut) = 0 then
Abort
else
if pReqData^ = pIPE^.Options.OptionsData^ then
Memo1.Lines.Add(PChar(PingEdit.Text) + ' ' + IntToStr(pIPE^.DataSize) + ' ' +IntToStr(pIPE^.RTT));
 
我好行明白为什么会出现这种错误了,但是我还想问一下zm30,为什么我的程序运行以后
都会出现IcmpSendEcho(hICMP, FIPAddress, pReqData, Length(MyString),@IPOpt,
pIPE, BufferSize, FTimeOut) = 0 ,这是怎么回事呢?会是什么原因造成的。
 
因为你输入了一个PING不通的地址,如果能PING通的话,不会返回0
 
我ping的是本机,我想视觉不该出现你说的ping不同的情况。还有别的原因吗
 
没有答案
 
后退
顶部