2012-06-06 67 views
2

我正在編譯我的應用程序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

回答

5

我的德爾福的知識可能會有點生疏,但據我記得:

PChar類型是(有點像,不完全)的指針,本身就是一個字符串,所以這種類型實際上是一個數組101個PChars中(串):

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

我想你應該將其更改爲array [0..100] of Char,或者爲什麼不宣佈HName因爲從一開始一個PAnsiChar

+0

如果我將它聲明爲char數組,那麼它會給出相同的錯誤。並且如果HName被聲明爲PAnsiChar,則它說「不兼容的類型:PAnsiChar和AnsiChar」。 – poonam

2

是......我知道了:) 我宣佈H姓名爲姓名:PAnsiChar;

if GetHostName(PAnsiChar(HName^), SizeOf(Name)) = 0 
HostName := StrPas(PAnsiChar(HName^)); 
HEnt := GetHostByName(PAnsiChar(HName^));  
5

這是不使用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