我正在使用Delphi-XE3从这里实现使用Windows API的Ping函数(http://delphi.about.com/od/internetintranet/l/aa081503a.htm)。但是我遇到了以下函数的问题。它显示不兼容的类型Pansichar和Pwidechar。我用PAnsichar替换了PChar,现在显示异常“无法从主机名获取IP”。我正在使用localhost进行测试。请指导正确的转换方法。
const ADP_IP = '127.0.0.1';
procedure TranslateStringToTInAddr(AIP: string; var AInAddr);
var
phe: PHostEnt;
pac: PChar;
GInitData: TWSAData;
begin
WSAStartup($101, GInitData);
try
phe := GetHostByName(PChar(AIP));
if Assigned(phe) then
begin
pac := phe^.h_addr_list^;
if Assigned(pac) then
begin
with TIPAddr(AInAddr).S_un_b do begin
s_b1 := Byte(pac[0]);
s_b2 := Byte(pac[1]);
s_b3 := Byte(pac[2]);
s_b4 := Byte(pac[3]);
end;
end
else
begin
raise Exception.Create('Error getting IP from HostName');
end;
end
else
begin
raise Exception.Create('Error getting HostName');
end;
except
FillChar(AInAddr, SizeOf(AInAddr), #0);
end;
WSACleanup;
end;
gethostbyname
时出了什么问题。我回答了你提出的问题。请不要期望我调试你程序的其余部分。这就是SO的工作方式。 - David Heffernangethostbyname()
函数正常工作。然而,我同意@David的观点,即var
参数应该被定义为TIpAddr
类型,因为你的代码依赖于它来工作。最后一个异常块中的FillChar
对我来说很神秘。你能解释一下吗? - AlexSC