gpt4 book ai didi

delphi - RawByteString 到 PWideChar 的可疑类型转换

转载 作者:行者123 更新时间:2023-12-02 07:55:50 25 4
gpt4 key购买 nike

我使用 libxml2 ( http://www.xmlsoft.org/ ) 在我的 Delphi 代码中读取/写入 xml 文件。 libxml2 对所有字符串使用 UTF-8 编码。

例如,函数 xmlsavefile 在 libxml2 中定义为

int xmlSaveFile (const char * filename, xmlDocPtr cur)

在 libxml2 Delphi 绑定(bind)中,此函数被翻译为

const LIBXML2_SO = 'libxml2-2.dll';
function xmlSaveFile(const FileName: PChar; cur: xmlDocPtr) : Longint; cdecl; external LIBXML2_SO;

这个函数可以用作

var FileName : string;
xmlSaveFile(PChar(Utf8Encode(FileName)), doc);

这似乎工作没有任何问题,并且已经过包括中文在内的多种语言的测试。但是,我收到编译器警告

RawByteString 到 PWideChar 的可疑类型转换

由于一切正常,我倾向于忽略此警告。尽管如此,

  • 我可以去掉这个警告吗?
  • 我必须预料到会出现任何问题吗?

最佳答案

错误出现在导入函数的声明中:

function xmlSaveFile(const FileName: PChar; cur: xmlDocPtr) : Longint; cdecl; 
external LIBXML2_SO;

此函数接受 8 位 UTF8 编码的文件名。从将文件名参数声明为 const char * 的 C 代码中可以看出这一点。

将代码更改为:

function xmlSaveFile(const FileName: PAnsiChar; cur: xmlDocPtr) : Longint; cdecl; 
external LIBXML2_SO;

然后通过:

PAnsiChar(Utf8Encode(FileName))

关于delphi - RawByteString 到 PWideChar 的可疑类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57892822/

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