我有RAR-component 2.0和Delphi 2010.此组件使用AnsiString作为文件路径。我怎样才能让它成为unicode?我在RAR.pas中将AnsiString更改为String,但它没有帮助。
谢谢!
答案 0 :(得分:2)
在 RAR.pas :
fFileName
字段和Filename
属性更改为 WideString 。TRAR.OpenFile
,以便FileName
参数为 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;
行。
答案 1 :(得分: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字符),但是如果这不起作用,那么如果你用更多的细节描述出了什么问题,它可能会有所帮助。 / p>
哦,只是为了确定:你正在使用Delphi 2009+吗?