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; 

当我尝试编译代码时,我得到以下错误: enter image description here

当我在另一个应用程序尝试这个代码是在Delphi 7 如何工作正常我是否将字符指针转换为PAnsiChar类型使其运行在Delphi XE2 ??。

+0

错误发生在哪条线上? –

+0

我刚刚标记为ERROR ... – poonam

我的德尔福的知识可能会有点生疏,但据我记得:

PChar类型是(有点像,不完全)的指针,本身就是一个字符串,所以这种类型实际上是一个数组101个PChars中(串):

Name = array[0..100] of PChar;

我想你应该将其更改为array [0..100] of Char,或者为什么不宣布HName因为从一开始一个PAnsiChar

+0

如果我将它声明为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; 
+1

哦好吧...我做了改变... thanx很多:) – poonam