【问题标题】:Delphi 2010 Error E2010 Incompatible types: 'AnsiChar' and 'Char'Delphi 2010 错误 E2010 不兼容的类型:“AnsiChar”和“Char”
【发布时间】: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 types


    【解决方案1】:

    使用 AnsiString 和 String 安全地执行必要的转换。

    MyAnsiString := AnsiString(inet_ntoa(AddrIn.sin_addr));
    MyString := String(MyAnsiString);
    pAddr := PChar(MyString);
    

    【讨论】:

    • 这可能是不正确的。 Delphi mag 中的代码表示 PAnsiChar 而不是 PWideChar。
    • 上述结果在“pAddr := PChar(MyString)”行上出现“E2010 不兼容的类型:'Char' 和 'PWideChar'”
    【解决方案2】:

    这取决于你想用它做什么。您是自己使用地址,还是将其传递给外部代码?

    如果您自己使用它,请尝试 thoiz_vd 的回答。作为一般规则,尽可能多地将内部字符串处理保留在 string 类型上。它会为您省去很多麻烦。

    另一方面,如果您将其传递给外部例程,例如 Windows API 中的某些内容,您必须确保数据采用 API 所期望的格式。这比第一种情况不太明确,因为当 Delphi 从AnsiString 转换为UnicodeString 作为基本字符串类型时,他们重做了Windows 单元中的许多winapi 标头以解析为等效的宽字符接受字符串的例程的版本。

    所以请检查您要发送的内容。如果需要PChar,请使用 thoiz_vd 的答案。但如果它期待 PAnsiChar,请将 pAddr 重新声明为 PAnsiChar

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 2013-06-09
      相关资源
      最近更新 更多