【问题标题】:Delphi: make unicode RAR-component 2.0Delphi:制作 unicode RAR 组件 2.0
【发布时间】:2011-09-13 11:12:05
【问题描述】:

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

谢谢!

【问题讨论】:

  • 如果 DLL 支持 unicode,您应该查看文档、示例或源代码,了解如何使用它。如果 DLL 尚不支持 Unicode,那么您无法从外部做任何事情来让它做到这一点。

标签: delphi unicode components ansi rar


【解决方案1】:

RAR.pas中:

  • TRARArchiveInformationfFileName 字段和 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; 行。

【讨论】:

    【解决方案2】:

    如果我查看您刚刚链接到的源代码,我认为您无需更改任何内容。看起来它应该已经支持 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+ 对吗?

    【讨论】:

    • 可能是 Rur.dll 的问题。我将所有内容都更改为 String,当我打开存档时,Demo 显示 ERAR_EOPEN = 15。可能是 rur.dll 使用 AnsiString,我需要新的...我现在知道了。
    • 函数 OpenFile(FileName: AnsiString): boolean; 有问题
    • 您应该将参数类型保留为 PAnsiChar、PChar 或 PWideChar,无论您更改它之前是什么。将其更改为字符串将无济于事,因为它是纯 Delphi 的原生类型,并且它与 P*Char 不兼容(至少在进行这样的外部调用时)。
    • 您根本不需要更改任何内容。 Delphi 2009 在字符串/Unicode 问题上与 2010 和 XE 相同。
    猜你喜欢
    • 2011-09-06
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多