文字列の「自然な比較」を実行する Windows API 関数を見つけました。次のように定義されています。
int StrCmpLogicalW(
LPCWSTR psz1,
LPCWSTR psz2
);
Delphi で使用するために、次のように宣言しました。
interface
function StrCmpLogicalW(psz1, psz2: PWideChar): integer; stdcall;
implementation
function StrCmpLogicalW; external 'shlwapi.dll' name 'StrCmpLogicalW';
Unicode文字列を比較するため、ANSI 文字列を比較したい場合に呼び出す方法がわかりません。文字列を WideString にキャストしてから PWideChar にキャストするだけで十分なようですが、このアプローチが正しいかどうかはわかりません。
function AnsiNaturalCompareText(const S1, S2: string): integer;
begin
Result := StrCmpLogicalW(PWideChar(WideString(S1)), PWideChar(WideString(S2)));
end;
私は文字エンコーディングについてほとんど知らないので、これが私の質問の理由です。この関数は問題ありませんか、それとも比較された両方の文字列を何らかの方法で最初に変換する必要がありますか?