【发布时间】:2011-10-13 22:03:25
【问题描述】:
我从 Delphi Magazine 加载了一些旧代码,当我在 Delphi 2010 中编译它时,我得到一个 E2010 不兼容的类型:'AnsiChar' 和 'Char'。
如何解决此错误?
pAddr := inet_ntoa(AddrIn.sin_addr);
pAddr 定义为 PChar
inet_ntoa 是一个返回 PAnsiChar
【问题讨论】:
我从 Delphi Magazine 加载了一些旧代码,当我在 Delphi 2010 中编译它时,我得到一个 E2010 不兼容的类型:'AnsiChar' 和 'Char'。
如何解决此错误?
pAddr := inet_ntoa(AddrIn.sin_addr);
pAddr 定义为 PChar
inet_ntoa 是一个返回 PAnsiChar
【问题讨论】:
使用 AnsiString 和 String 安全地执行必要的转换。
MyAnsiString := AnsiString(inet_ntoa(AddrIn.sin_addr));
MyString := String(MyAnsiString);
pAddr := PChar(MyString);
【讨论】:
这取决于你想用它做什么。您是自己使用地址,还是将其传递给外部代码?
如果您自己使用它,请尝试 thoiz_vd 的回答。作为一般规则,尽可能多地将内部字符串处理保留在 string 类型上。它会为您省去很多麻烦。
另一方面,如果您将其传递给外部例程,例如 Windows API 中的某些内容,您必须确保数据采用 API 所期望的格式。这比第一种情况不太明确,因为当 Delphi 从AnsiString 转换为UnicodeString 作为基本字符串类型时,他们重做了Windows 单元中的许多winapi 标头以解析为等效的宽字符接受字符串的例程的版本。
所以请检查您要发送的内容。如果需要PChar,请使用 thoiz_vd 的答案。但如果它期待 PAnsiChar,请将 pAddr 重新声明为 PAnsiChar。
【讨论】: