2、你的函数本身也有问题,Dll里的字符串不能这样传递。你看看Windows的API函数就知道,没有一个是以PChar为返回值的(字符串函数除外)。你这个程序能正常运行,真是奇迹。
3、下面这个函数是我给你改的,sURL是地址;Buffer是一个缓冲区,用来接收IP地址;BufferLength是缓冲区长度,当Buffer为 nil 时它返回需要的空间大小;函数返回值为IP地址的长度。
function getIPAddress(sURL, Buffer: PCharvar BufferLength: Longint): Longintstdcall
var
ICMP: TIdIcmpClient
R: TReplyStatus
s: string
begin
Result := 0
ICMP := TIdIcmpClient.Create(nil)
ICMP.ReceiveTimeout := 1000
ICMP.Host := sURL
ICMP.Ping
R := ICMP.ReplyStatus
s := Format('%d,', [R.MsRoundTripTime]) + R.FromIpAddress
if Buffer = nil then
BufferLength := Length(s) + 1
else begin
StrLCopy(Buffer, PChar(s), BufferLength - 1)
Result := StrLen(Buffer)
end
ICMP.free
end
4、在主程序中,这个函数这样调用
var
len: Longint
buf: PChar
begin
getIPAddress(sURL, nil, len)
GetMem(buf, len)
getIPAddress(sURL, buf, len)
ShowMessage(buf)
FreeMem(buf)
end
1、Windows+R,然后在运行中输入cmd,点击确定。
2、进入CMD页面,先输入ipconfig ,然后回车看看。
3、回车后找到默认网关,本机的IP地址。
4、然后输入ping 192.168.10.1 -t 再回车,-t就是一直ping下去。
5、Ctrl+C是终止它继续ping下去,主要看两个地方,一是有没有丢包,二是有没有延时。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)