I am compiling my application in Delphi XE2.It was developed in delphi 7.. My code is as follows:
type
Name = array[0..100] of PChar;
PName = ^Name;
var
HEnt: pHostEnt;
HName: PName;
WSAData: TWSAData;
i: Integer;
begin
Result := False;
if WSAStartup($0101, WSAData) <> 0 then begin
WSAErr := 'Winsock is not responding."';
Exit;
end;
IPaddr := '';
New(HName);
if GetHostName(HName^, SizeOf(Name)) = 0 then <-----ERROR
begin
HostName := StrPas(HName^);
HEnt := GetHostByName(HName^);
"
"
so on...
end;
When i try to compile the code ,i get the following error:

When i try this code in another application it works fine in Delphi 7. How do i convert from character pointer to PAnsiChar type to make it run on Delphi XE2??.
My Delphi knowledge might be a little rusty, but as far as I remember:
PChar is (kind of like, not exactly) a pointer to a string in itself, so this type is actually an array of 101 PChars (strings):
Name = array[0..100] of PChar;
I think you should change it to array [0..100] of Char, or why not declare HName as a PAnsiChar right from the start?
This is not the correct way to use gethostname(). Use this instead:
var
HName: array[0..100] of AnsiChar;
HEnt: pHostEnt;
WSAData: TWSAData;
i: Integer;
begin
Result := False;
if WSAStartup($0101, WSAData) <> 0 then begin
WSAErr := 'Winsock is not responding."';
Exit;
end;
IPaddr := '';
if gethostname(HName, SizeOf(Name)) = 0 then
begin
HostName := StrPas(HName);
HEnt := gethostbyname(HName);
...
end;
...
end;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With