我裝了德爾福雜誌的一些舊代碼,當我編譯它裏面德爾福2010年,我得到一個E2010不兼容的類型:「ANSIChar類型」和「字符」。德爾福2010錯誤E2010不兼容的類型:「ANSIChar類型」和「字符」
如何解決此錯誤?
PADDR:= INET_NTOA(AddrIn.sin_addr);
PADDR定義爲PChar類型
INET_NTOA是返回PAnsiChar
我裝了德爾福雜誌的一些舊代碼,當我編譯它裏面德爾福2010年,我得到一個E2010不兼容的類型:「ANSIChar類型」和「字符」。德爾福2010錯誤E2010不兼容的類型:「ANSIChar類型」和「字符」
如何解決此錯誤?
PADDR:= INET_NTOA(AddrIn.sin_addr);
PADDR定義爲PChar類型
INET_NTOA是返回PAnsiChar
使用一個AnsiString類型和字符串安全地執行必要的類型轉換的功能。
MyAnsiString := AnsiString(inet_ntoa(AddrIn.sin_addr));
MyString := String(MyAnsiString);
pAddr := PChar(MyString);
這取決於你想要用它做什麼。你是自己使用地址,還是將它傳遞給外部代碼?
如果你自己使用它,嘗試thoiz_vd的答案。作爲一般規則,儘可能多地保留字符串類型的內部字符串處理。它會爲你節省很多麻煩。
在另一方面,如果你將它傳遞給外部例程,就像在Windows API中的東西,你必須確保數據是,該API期待的格式。這是一個有點不太明確的比第一種情況,因爲當德爾福從AnsiString
轉變爲UnicodeString
爲根本字符串類型,他們重做了很多在Windows
單位WINAPI頭,以解決該花的例程相當於widechar版本字符串。
因此,檢查你想發送給什麼。如果它需要PChar
,請使用thoiz_vd的答案。但是,如果期望PAnsiChar
,則將pAddr
重新聲明爲PAnsiChar
。
這可能是不正確的。 Delphi mag中的代碼表示PAnsiChar而不是PWideChar。上線「PADDR:= PChar類型(MyString的)」:在 –
「‘字符’和‘PWideChar’E2010不兼容的類型的」上述結果 –