dum*_*uch 0 delphi unicode delphi-2007 pchar delphi-xe2
我有一个DLL函数,返回一个指向ANSI文本(PAnsiChar)的指针.我想将它分配给(unicode-)字符串(这是Delphi XE2.).以下编译,但我得到一个警告"W1057隐式字符串从'AnsiChar'转换为'字符串'":
function TProj4.pj_strerrno(_ErrorCode: Integer): string;
var
Err: PAnsiChar;
begin
Err := Fpj_strerrno(_ErrorCode);
Result := Err;
end;
Run Code Online (Sandbox Code Playgroud)
编辑:有问题的文本是英文错误信息,因此这里不太可能有任何转换问题.
我现在很想明确地将Err明确强制转换成这样的字符串......
Result := String(Err);
Run Code Online (Sandbox Code Playgroud)
..摆脱警告.这可能会出错吗?我宁愿使用临时的AnsiString变量吗?
var
s: AnsiString;
[...]
s := Err;
Result := String(s);
Run Code Online (Sandbox Code Playgroud)
如果是,为什么?
或者我应该明确说明,代码首先将PAnsiChar转换为AnsiString,然后将AnsiString转换为String?
Result := String(AnsiString(Err));
Run Code Online (Sandbox Code Playgroud)
当然,我可以使它成为一个功能:
function PAnsicharToString(_a: PAnsiChar): string;
begin
// one of the above conversion codes goes here
end;
Run Code Online (Sandbox Code Playgroud)
所有这些选项都可以编译,但它们会起作用吗 这里最好的做法是什么?
加分:理想情况下,代码应该与Delphi 2007和更新版本一起编译和使用.
如果文本是在用户当前区域设置中编码的,那么我会说它最简单:
var
p: PAnsiChar;
str: string;
....
str := string(p);
Run Code Online (Sandbox Code Playgroud)
否则,如果您希望从特定代码页转换为Unicode字符串,那么您将使用UnicodeFromLocaleChars.