1

我有RAR 组件 2.0和 Delphi 2010。这个组件使用 AnsiString 作为文件路径。我怎样才能使它成为unicode?我在 RAR.pas 中将 AnsiString 更改为 String 但没有帮助。

谢谢!

4

2 回答 2

2

RAR.pas 中

  • 将 TRARArchiveInformationfFileName字段和Filename属性更改为WideString
  • 更改TRAR.OpenFileFileName参数是WideString
  • 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

如果我查看您刚刚链接到的源代码,我认为您无需更改任何内容。看起来它应该已经支持 unicode。作者声称它适用于 Delphi 2009,我看到 TRarProcessFile() 有两个版本:

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 回答