Delphi XE 10.1 JVCL安装失败

时间:2016-10-10 23:20:18

标签: delphi jvcl

我已经安装了最新的JCL 2016-10-10 我想安装最新的JVCL,但是我收到了一些错误消息。

我如何安装?

  

Windows 10 Home(10.0.0)

     

JVCL 3.50.0.0

     

[生成:包]

     

为D24生成包

     

已加载的template.dpk

     

已加载的template.dproj

     

已加载的template.rc

     

[编译:包]

     

[编译:JvCore240.bpl]

     

Embarcadero Delphi for Win32编译器版本31.0

     

版权所有(c)1983,2016 Embarcadero Technologies,Inc。

     

E:\ DelphiComp \ XE10.1 \ JVCL3-2016-10-10 \ run \ JvAppIniStorage.pas(261)错误:E2361无法访问私有符号TMemIniFile.FSections

     

E:\ DelphiComp \ XE10.1 \ JVCL3-2016-10-10 \ run \ JvAppIniStorage.pas(261)警告:W1023比较有符号和无符号类型 - 加宽了两个操作数

     

E:\ DelphiComp \ XE10.1 \ JVCL3-2016-10-10 \ run \ JvAppIniStorage.pas(261)错误:预期E2014语句,但找到“Boolean”类型的表达式

     

E:\ DelphiComp \ XE10.1 \ JVCL3-2016-10-10 \ run \ JvAppIniStorage.pas(274)错误:E2361无法访问私有符号TMemIniFile.FSections

     

JvCore.dpk(2356)致命:F2063无法编译用过的单位'JvAppIniStorage.pas'

1 个答案:

答案 0 :(得分:1)

Delphi 10.1 Berlin版本通过课程助手取消了私人会员的访问权限(参见How to access private methods without helpers?)。这是您拒绝访问TMemIniFile.FSections时可以看到的错误消息。

查看JvAppIniStorage.pas的最新代码,这是固定的:

{ Optimization of TCustomIniFile.ValueExists.
  Note that this is a dirty hack, a better way would be to rewrite TMemIniFile;
  especially expose FSections. }
{$IFDEF DELPHI2009_UP}
type
  TMemIniFileAccess = class(TCustomIniFile)
  {$IFDEF RTL310_UP} // 10.1 Berlin removed the access to private fields
    {$IFDEF RTL320_UP}
      {$MESSAGE WARN 'Check that the new RTL still has FSections as the first member of TMemIniFile'}
    {$ENDIF RTL320_UP}
  private
    FSections: TStringList;
  {$ENDIF RTL310_UP}
  end;

如代码注释中所述,如果FSections仍被声明为TCustomIniFile中的第一个字段,则这是一种肮脏的黑客行为。

在代码中:

function TMemIniFileHelper.SectionExists(const Section: string): Boolean;
begin
  {$IFDEF RTL310_UP} // 10.1 Berlin removed the access to private fields
  Result := TMemIniFileAccess(Self).FSections.IndexOf(Section) >= 0;
  {$ELSE}
  Result := Self.FSections.IndexOf(Section) >= 0;
  {$ENDIF RTL310_UP}
end;

确保您拥有jvcl的最新源代码并重新编译。请注意,符号RTL310_UPjedi.inc中定义。