2016-10-10 4 views
0

最新のJCL 2016-10-10 をインストールしましたが、最新のJVCLをインストールしたいのですが、いくつかのエラーメッセージが表示されます。Delphi XE 10.1 JVCLのインストールに失敗しました

どうすればインストールできますか?

Windows 10 Home (10.0.0)

JVCL 3.50.0.0

[Generating: Packages]

Generating packages for D24

Loaded template.dpk

Loaded template.dproj

Loaded template.rc

[Compiling: Packages]

[Compiling: JvCore240.bpl]

Embarcadero Delphi for Win32 compiler version 31.0

Copyright (c) 1983,2016 Embarcadero Technologies, Inc.

E:\DelphiComp\XE10.1\JVCL3-2016-10-10\run\JvAppIniStorage.pas(261) Error: E2361 Cannot access private symbol TMemIniFile.FSections

E:\DelphiComp\XE10.1\JVCL3-2016-10-10\run\JvAppIniStorage.pas(261) Warning: W1023 Comparing signed and unsigned types - widened both operands

E:\DelphiComp\XE10.1\JVCL3-2016-10-10\run\JvAppIniStorage.pas(261) Error: E2014 Statement expected, but expression of type 'Boolean' found

E:\DelphiComp\XE10.1\JVCL3-2016-10-10\run\JvAppIniStorage.pas(274) Error: E2361 Cannot access private symbol TMemIniFile.FSections

JvCore.dpk(2356) Fatal: F2063 Could not compile used unit 'JvAppIniStorage.pas'

+1

あなたは最新のものをインストールしようとしていますが、そうではないと言います。この問題は4月に修正されました。これはよくある間違いです。 VCSの使い方を知り、最新のものを入手してください。 –

答えて

1

デルファイ10.1ベルリンのバージョンは、クラスヘルパー経由でプライベートメンバー(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で定義されています。

+0

これは本当に反乱のハックではありません...... –

+0

@DavidHeffernan、おそらく、oopの観点からですが、実用的なプログラマーは何かオプションがあります。 –

+0

こんにちはDavid、ご意見ありがとうございます。しかし、私はそれをすることはできません。 –

関連する問題