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

4

我加载了一些来自 Delphi Magazine 的旧代码,但是在 Delphi 2010 中编译时,我收到一个 E2010 不兼容类型的错误:'AnsiChar' 和 'Char'。

我该如何解决这个错误?

pAddr := inet_ntoa(AddrIn.sin_addr);

pAddr 定义为 PChar
inet_ntoa 是一个返回 PAnsiChar 的函数。

2个回答

3
这取决于你打算用它做什么。你是在自己使用地址,还是要传递给外部代码?
如果是在自己使用,请尝试使用thoiz_vd的答案。通常情况下,尽可能保持内部字符串处理在string类型中。这样会省去很多麻烦。
另一方面,如果你要将地址传递给外部程序,比如Windows API中的某些内容,你必须确保数据以API期望的格式提供。这种情况没有第一种情况那么明确,因为当Delphi从AnsiString转换为UnicodeString作为基本字符串类型时,他们重新制作了很多winapi头文件,在Windows单元中解析等效的widechar版本的需要字符串的例程。
所以要检查一下你要发给哪里。如果需要PChar,请使用thoiz_vd的答案。但如果它期望一个PAnsiChar,请将pAddr重申为PAnsiChar。

3
使用 AnsiString 和 String 安全地执行所需的类型转换。
MyAnsiString := AnsiString(inet_ntoa(AddrIn.sin_addr));
MyString := String(MyAnsiString);
pAddr := PChar(MyString);

1
这可能是不正确的。Delphi mag中的代码意味着PAnsiChar而不是PWideChar。 - David Heffernan
1
在“pAddr := PChar(MyString)”这一行上出现了“E2010不兼容的类型:'Char'和'PWideChar'”错误。 - Andreas Hinderberger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接