我从Delphi杂志中加载了一些旧代码,当我在Delphi 2010中编译它时,我得到了一个E2010不兼容的类型:'AnsiChar'和'Char'。
如何解决此错误?
pAddr := inet_ntoa (AddrIn.sin_addr);
pAddr 定义为 PChar
inet_ntoa 是一个返回 PAnsiChar
答案 0 :(得分:3)
使用AnsiString和String安全地执行必要的强制转换。
MyAnsiString := AnsiString(inet_ntoa(AddrIn.sin_addr));
MyString := String(MyAnsiString);
pAddr := PChar(MyString);
答案 1 :(得分:2)
这取决于你尝试用它做什么。您是自己使用地址,还是将其传递给外部代码?
如果您自己使用它,请尝试thoiz_vd的回答。作为一般规则,尽可能多地保留字符串类型的内部字符串处理。它会为你省去很多麻烦。
另一方面,如果您将其传递给外部例程(如Windows API中的某些内容),则必须确保数据采用API期望的格式。这比第一种情况稍微不那么明确,因为当Delphi从AnsiString
转换为UnicodeString
作为基本字符串类型时,它们在Windows
中重写了很多winapi头文件。单元解析为带有字符串的例程的等效widechar版本。
请检查您发送的内容。如果需要PChar
,请使用thoiz_vd的答案。但如果期望PAnsiChar
,请将pAddr
重新声明为PAnsiChar
。