gpt4 book ai didi

delphi - 不兼容的类型 : 'PAnsiChar' and 'PWideChar'

转载 作者:行者123 更新时间:2023-12-03 14:46:16 29 4
gpt4 key购买 nike

我是delphi XE8的新手。我有以下来 self 的 delphi 版本 6 的代码,我想在 delphi XE8 中运行它。

1. function UTF8ToStringLen(const src: PChar; const Len: Cardinal): widestring;
2. var
3. l: Integer;
4. begin
5. SetLength(Result, Len);
6. if Len > 0 then
7. begin
8. l := MultiByteToWideChar( CP_UTF8, 0, src, Len, PWChar(Result), Len*SizeOf(WideChar)); <--error
9. SetLength(Result, l);
10. end;
11. end;
12.
13.
14. function StringToUTF8Len(const src: PChar; const Len: Cardinal): string;
15. var
16. bsiz: Integer;
17. Temp: string;
18. begin
19. bsiz := Len * 3;
20. SetLength(Temp, bsiz);
21. if bsiz > 0 then
22. begin
23. StringToWideChar(src, PWideChar(Temp), bsiz);
24. SetLength(Result, bsiz);
25. bsiz := WideCharToMultiByte(CP_UTF8, 0, PWideChar(Temp), -1, PChar(Result), bsiz, nil, nil); <--error
26. if bsiz > 0 then dec(bsiz);
27. SetLength(Result, bsiz);
28. end;
29. end;

当我尝试运行它时,错误指向代码中的第 8 行和第 25 行,并显示错误消息

ERROR MESSAGE: Incompatible types: 'PAnsiChar' and 'PWideChar'

我到处寻找解决方案,但就是无法解决问题。请帮忙..谢谢。

最佳答案

在 Delphi 2007 及更早版本中,PCharPAnsiChar 的别名。在 Delphi 2009 及更高版本中,PCharPWideChar 的别名。因此,通过更改编译器,您可以更改代码的含义。

您只需将 PChar 替换为 PAnsiChar 即可解决此问题,代码将具有其原始含义。

在现代 Unicode Delphi 中,使用 string(UnicodeString 的别名)而不是 COM WideString 会更自然。您还可以使用众多库例程之一来执行 UTF-8 转换。

肯定还会有其他问题摆在您面前。我建议您阅读Marco Cantù's whitepaper on Unicode in Delphi作为你的下一步行动。

关于delphi - 不兼容的类型 : 'PAnsiChar' and 'PWideChar' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32266057/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com