我已经安装了最新的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'
答案 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_UP
在jedi.inc中定义。