1

RAR コンポーネント 2.0と Delphi 2010 を使用しています。このコンポーネントはファイル パスに AnsiString を使用します。どうすればユニコードにできますか?RAR.pas で AnsiString を String に変更しましたが、役に立ちませんでした。

ありがとう!

4

2 に答える 2

2

RAR.pas:

  • TRARArchiveInformationのフィールドとプロパティをWideStringに変更ます。fFileNameFilename
  • 引数がWideStringTRAR.OpenFileになるように変更します。FileName
  • このTRAR.OpenArchive(Extract:boolean)行を変更します。

    ArcName := PAnsiChar(fArchiveInformation.FileName);

    これに:

    ArcNameW := PWideChar(fArchiveInformation.FileName);

RAR_DLL.pas:

GetFileModifyDateこの行を次のように変更します。

h := OpenFile(PAnsiChar(FileName), Struct, OF_SHARE_DENY_NONE);

これは:

h := FileOpen(FileName, fmOpenRead or fmShareDenyNone);

varブロックStruct: TOFSTRUCT;から行を削除します。

于 2011-06-13T16:22:17.260 に答える
1

リンク先のソースコードを見ると、何も変更する必要はなかったと思います。すでにユニコードをサポートしているはずです。著者は Delphi 2009 用であると主張していますが、TRarProcessFile() には 2 つのバージョンがあることがわかります。

TRARProcessFile = function(hArcData: THandle; Operation: Integer; DestPath, DestName: PAnsiChar): Integer; stdcall;
TRARProcessFileW = function(hArcData: THandle; Operation: Integer; DestPath, DestName: PWideChar): Integer; stdcall;

TRARProcessFileW は、Unicode 文字を含むファイル名を受け入れる必要があります。それを使ってみましたか?

どういうわけかまだうまくいかないかもしれません (私はまだ Unicode 文字で試したことはありません)。

ああ、念のために言っておきますが、あなたは Delphi 2009+ を使用していますよね?

于 2011-06-12T16:49:10.800 に答える