Delphi 2010错误E2010不兼容类型:'AnsiChar'和'Char'

时间:2011-07-26 22:34:28

标签: delphi types

我从Delphi杂志中加载了一些旧代码,当我在Delphi 2010中编译它时,我得到了一个E2010不兼容的类型:'AnsiChar'和'Char'。

如何解决此错误?

pAddr := inet_ntoa (AddrIn.sin_addr);

pAddr 定义为 PChar
inet_ntoa 是一个返回 PAnsiChar

的函数

2 个答案:

答案 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