我有一个 DLL 函数,它返回一个指向 ANSI 文本 (PAnsiChar) 的指针。我想将其分配给(unicode-)字符串(这是Delphi XE2。)。以下编译但我收到警告“W1057 Implicit String cast from 'AnsiChar' to 'string'”:
function TProj4.pj_strerrno(_ErrorCode: Integer): string;
var
Err: PAnsiChar;
begin
Err := Fpj_strerrno(_ErrorCode);
Result := Err;
end;
编辑:有问题的文本是英文的错误消息,所以这里不太可能有任何转换问题。
我现在很想将 Err 显式类型转换为这样的字符串......
Result := String(Err);
..摆脱警告。这会出错吗?我应该改用临时 AnsiString 变量吗?
var
s: AnsiString;
[...]
s := Err;
Result := String(s);
如果是,为什么?
或者我应该明确表示,代码首先将 PAnsiChar 转换为 AnsiString,然后将 AnsiString 转换为 String?
Result := String(AnsiString(Err));
当然我可以把它变成一个函数:
function PAnsicharToString(_a: PAnsiChar): string;
begin
// one of the above conversion codes goes here
end;
所有这些选项都可以编译,但它们会起作用吗?这里的最佳做法是什么?
加分项:理想情况下,代码应该可以编译并与 Delphi 2007 和更新版本一起使用。