1

我正在编写一个使用 C-DLL 的工具。C-DLL 的函数需要一个char*UTF-8 格式的 。我的问题:我可以通过 aPChar还是必须使用UTF8Encode(string)

4

2 回答 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
  1. 请编辑问题并使用您的目标 Delphi 版本添加标签。

  2. 将其传递为PAnsiChar; PChar 是一个小丑,可能意味着不同的数据类型。当您使用类似 DLL 的 API 时,您会忽略编译器安全网,这意味着您应该自己制作。这意味着您应该使用真正的类型,而不是小丑,无论哪个编译器设置和版本处于活动状态,这些类型都不会改变。

  3. 但是在传递指针之前,您应该确保源数据实际上是用 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 回答