Wie konvertieren von PAnsichar zu PWidechar?
Ich die Umsetzung Ping-Funktion mithilfe der windows-API in delphi-xe3 von hier
(http://delphi.about.com/od/internetintranet/l/aa081503a.htm).
Ich habe ein problem mit der folgenden Funktion.Es zeigt Fehlermeldung inkompatible Typ Pansichar und Pwidechar.Ich ersetzte Pchar mit PAnsichar jetzt zeigt Ausnahme
'Fehler beim abrufen der IP vom HostName'.
Teste ich es mit "localhost".
Bitte guide was ist die richtige Konvertierung.
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;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie nicht wollen, zu konvertieren von
PAnsiChar
zuPWideChar
. Auf Ihre Unicode-Delphi-IhrePChar
Karten zuPWideChar
. Abergethostbyname
erhältPAnsiChar
. Sie benötigen zur Konvertierung von Unicode in ANSI.Code wie dieser:
In anderen Worten, konvertieren Sie Ihre Zeichenfolge zu
AnsiString
, und dann warf alsPAnsiChar
. Ich persönlich würde erklären, dieAIP
parameterAnsiString
.Und schreiben Sie dann den Aufruf
gethostbyname
etwa so:Dass untypisierte
var
parameter wirkt auf mich unseriös. Ich sehe keinen zwingenden Grund für seine Verwendung. Was ist falsch deklarieren den TypTIPAddr
? IhreFillChar
ist etwas dubios. Wie können SieSizeOf
auf eine nicht typisierte parameter?gethostbyname
. Der code in meiner Antwort nicht richtig. Bitte erwarten Sie nicht, mich zu Debuggen, der rest des Programms. Ich antwortete auf die Frage, die Sie fragte. Das ist, wie SO funktioniert.gethostbyname()
- Funktion funktionierte einwandfrei. Allerdings Stimme ich mit @David, dass dievar
parameter eingegeben werden muss, wieTIpAddr
, da Ihr code abhängt, dass, um zu arbeiten. DieFillChar
in den letzten exception-block ist geheimnissvolle mir. Könnten Sie das erklären?