我装了德尔福杂志的一些旧代码,当我编译它里面德尔福2010年,我得到一个E2010不兼容的类型:“ANSIChar类型”和“字符”。德尔福2010错误E2010不兼容的类型:“ANSIChar类型”和“字符”
如何解决此错误?
PADDR:= INET_NTOA(AddrIn.sin_addr);
PADDR定义为PChar类型
INET_NTOA是返回PAnsiChar
我装了德尔福杂志的一些旧代码,当我编译它里面德尔福2010年,我得到一个E2010不兼容的类型:“ANSIChar类型”和“字符”。德尔福2010错误E2010不兼容的类型:“ANSIChar类型”和“字符”
如何解决此错误?
PADDR:= INET_NTOA(AddrIn.sin_addr);
PADDR定义为PChar类型
INET_NTOA是返回PAnsiChar
使用一个AnsiString类型和字符串安全地执行必要的类型转换的功能。
MyAnsiString := AnsiString(inet_ntoa(AddrIn.sin_addr));
MyString := String(MyAnsiString);
pAddr := PChar(MyString);
这取决于你想要用它做什么。你是自己使用地址,还是将它传递给外部代码?
如果你自己使用它,尝试thoiz_vd的答案。作为一般规则,尽可能多地保留字符串类型的内部字符串处理。它会为你节省很多麻烦。
在另一方面,如果你将它传递给外部例程,就像在Windows API中的东西,你必须确保数据是,该API期待的格式。这是一个有点不太明确的比第一种情况,因为当德尔福从AnsiString
转变为UnicodeString
为根本字符串类型,他们重做了很多在Windows
单位WINAPI头,以解决该花的例程相当于widechar版本字符串。
因此,检查你想发送给什么。如果它需要PChar
,请使用thoiz_vd的答案。但是,如果期望PAnsiChar
,则将pAddr
重新声明为PAnsiChar
。
这可能是不正确的。 Delphi mag中的代码表示PAnsiChar而不是PWideChar。上线“PADDR:= PChar类型(MyString的)”:在 –
“‘字符’和‘PWideChar’E2010不兼容的类型的”上述结果 –