Delphi XE2不兼容类型指针和PAnsiChar
我正在编译我的应用程序Delphi XE2。它是在delphi 7开发的。。我的代码如下:Delphi XE2不兼容类型指针和PAnsiChar
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;
当我尝试编译代码时,我得到以下错误:
当我在另一个应用程序尝试这个代码是在Delphi 7 如何工作正常我是否将字符指针转换为PAnsiChar类型使其运行在Delphi XE2 ??。
我的德尔福的知识可能会有点生疏,但据我记得:
PChar类型是(有点像,不完全)的指针,本身就是一个字符串,所以这种类型实际上是一个数组101个PChars中(串):
Name = array[0..100] of PChar;
我想你应该将其更改为array [0..100] of Char
,或者为什么不宣布HName
因为从一开始一个PAnsiChar
?
如果我将它声明为char数组,那么它会给出相同的错误。并且如果HName被声明为PAnsiChar,则它说“不兼容的类型:PAnsiChar和AnsiChar”。 – poonam
是......我知道了:) 我宣布H姓名为姓名:PAnsiChar;和
if GetHostName(PAnsiChar(HName^), SizeOf(Name)) = 0
HostName := StrPas(PAnsiChar(HName^));
HEnt := GetHostByName(PAnsiChar(HName^));
这是不使用gethostname()
的正确方法。改为:
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;
哦好吧...我做了改变... thanx很多:) – poonam
错误发生在哪条线上? –
我刚刚标记为ERROR ... – poonam