ANSI テキスト (PAnsiChar) へのポインターを返す DLL 関数があります。これを(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 以降のバージョンでもコンパイルおよび動作するはずです。