RAR コンポーネント 2.0と Delphi 2010 を使用しています。このコンポーネントはファイル パスに AnsiString を使用します。どうすればユニコードにできますか?RAR.pas で AnsiString を String に変更しましたが、役に立ちませんでした。
ありがとう!
RAR コンポーネント 2.0と Delphi 2010 を使用しています。このコンポーネントはファイル パスに AnsiString を使用します。どうすればユニコードにできますか?RAR.pas で AnsiString を String に変更しましたが、役に立ちませんでした。
ありがとう!
RAR.pasで:
fFileName
Filename
TRAR.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;
から行を削除します。
リンク先のソースコードを見ると、何も変更する必要はなかったと思います。すでにユニコードをサポートしているはずです。著者は 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+ を使用していますよね?