我正在编写一个使用 C-DLL 的工具。C-DLL 的函数需要一个char*
UTF-8 格式的 。我的问题:我可以通过 aPChar
还是必须使用UTF8Encode(string)
?
问问题
2747 次
2 回答
5
考虑一个名为 的字符串变量s
。在 ANSI DelphiPChar(s)
上是 ANSI 编码的。在 Unicode Delphi 上,它是 UTF-16 编码的。
因此,无论哪种方式,您都需要转换s
为 UTF-8 编码。然后您可以使用PAnsiChar(...)
来获取指向以空结尾的 C 字符串的指针。
因此,您需要的代码如下所示:
PAnsiChar(UTF8Encode(s))
于 2013-02-15T11:11:46.253 回答
1
请编辑问题并使用您的目标 Delphi 版本添加标签。
将其传递为
PAnsiChar
; PChar 是一个小丑,可能意味着不同的数据类型。当您使用类似 DLL 的 API 时,您会忽略编译器安全网,这意味着您应该自己制作。这意味着您应该使用真正的类型,而不是小丑,无论哪个编译器设置和版本处于活动状态,这些类型都不会改变。但是在传递指针之前,您应该确保源数据实际上是用 UTF8 编码的。
.
Var data: string; buffer: UTF8String; buffer_ptr: PAnsiChar;
Begin
buffer := data + #0;
// transcoding to UTF8 from whatever charset it was, transparently done by Delphi RTL
// last zero to ensure that even for empty string you would have valid pointer below
buffer_ptr := Pointer(@buffer[1]); // making sure there can be no codepage bound to the datatype
C_DLL_CALL(buffeR_ptr);
End;
于 2013-02-15T11:10:54.400 回答