問題タブ [delphi-10.4-sydney]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - F2051 ユニットが別のバージョンでコンパイルされました (再度)
(警告: 長文を読んでください。この質問は、F2051 に関する他の多くの質問を参照しています)
ソース ツリーに PatchLibs という名前のフォルダーがあり、そこにサード パーティ ソースの変更されたファイルを置きます。
これはプロジェクトの検索パスにあります。..\Skin;..\PatchLibs
私はファイル dxBar.pas を DevExpress コントロールから Patchlibs にコピーし、実装セクションの一部のコードのみを変更しました。
さて、ビルドすると(すべてのローカル.dcu
ファイルが削除され、「クリーンアップ」されます)、悪名高いものになります:
コード行を参照しません。コンパイルを開始すると、メッセージが表示されます。
構成:
新しい VM にインストールされた新しい Delphi および DevExpress バージョン。プログラムソースツリーをコピーしました。
C:\DelphiLibs\DevExpress\VCL\Library\RS27
32ビットライブラリパスにありますそのフォルダーには、すべての DevExpress dcu が含まれています。特に
cxBarEditItem.dcu
、dxBar.dcu
($(DXVCL)\Library\RS27\Win64
ライブラリ パスもそうですが、これは Win32 アプリです)cxBarEditItem.dcu
どこにも他に出現するものはありません。dcBar.pas
そしてcxBarEditItem.pas
入っていますc:\DelphiLibs\DevExpress\VCL\ExpressBars\Sources\
(すべての cx*.* および dx*.* ファイルのディスクをスキャンしました)。そのソース フォルダは、ブラウジング パスにも存在します (
$(DXVCL)\ExpressBars\Sources
)これらは単なるユニットです(対応する
.dfm
ファイルはありません)Patchlibs には、問題のない他の変更された DevExpress ファイルがあります。そして、私が同じ問題を抱えているものがいくつかあります(だけではありません
dxBar
)。.dcu
プロジェクトは、ソースの横にファイルを配置するように設定されてい.pas
ます (ユニットの出力ディレクトリは空白です)DevExpress ファイルはプロジェクトの一部ではありません
プロジェクト内の他のソース ファイルが変更されました
のコピーをcxBarEditItem.pas
Patchlibs にプルすると、エラーは別のユニットに (繰り返し) 伝播するだけです。
多くの回答を読んだにもかかわらず (注目すべき SO の質問:なぜ私のユニットは自分のファイルの「別のバージョンでコンパイルされているのですか?」 )
、エラーが発生する理由と今回はそれを修正する方法がわかりません。インターフェイスの Uses セクションにあり
cxBarEditItem.pas
、Uses 句にありますが、なぜ再コンパイルする必要があるのでしょうか?dxBar
cxBarEditItem
もちろん、DevExpress のソース コード ディレクトリを検索パスに追加することもできますが、多くのディレクトリがあり、それらのディレクトリにも.dcu
ファイルが作成されます。実際の問題を覆い隠しており、以前の Delphi/DevExpress セットアップではこれは必要なかっ
たので、私はそれをしないことを好みます:
以前の Delphi 10.3 の 32 ビット ライブラリ パス:
Delphi 10.4 の 32 ビット ライブラリ パス:
最後の1つを上下に移動したり、変更したりして$(DXVCL)\Library\RS27
も役に立ちませんでした
これらの 5 つの Embarcadero 行は奇妙に見えます (この SO の質問を参照してください。古い対応する行に置き換えました (そして、Embarcadero に報告しました)。問題に変化はありません。
追加の調査/失敗した試み
Ian Boydは、2014 年に非常によく似た問題を抱えていました
。そこでのDavidの答え
に
基づいて、試してみることにしました。私の状況は少し異なりました.DevExコードをビルドするときに使用されたコンパイラ設定を見つけて、変更した.dxBar.pas
DevExpress インストールのサブフォルダーに2 つの.dproj
ファイルがあることに気付きました:および(要ところで)
テスト プロジェクトのすべてのコンパイラ オプションをデフォルト以外に設定し、それをすべてのデフォルトと比較することで(ほとんど) 理解できました。 UI オプションの設定とコンテンツの関係。
次に、それらの設定をプロジェクトの設定と比較したところ、次の違いが見つかりました (無関係な行は削除されています)。Packages
cxLibraryRS27.dproj
dxBarRS27.dproj
cxLibraryRS27
.dproj
.dproj
cxLibraryRS27.dproj
彼らはこれを余分に持っていました:
この余分なものがありました:
と
そして彼らはこのPropertyGroupを持っていませんでした
これらを調べてみると、これらは設定が異なり、生成された.dcu
ファイルに影響を与える可能性があると思います。
範囲チェックオフ {$R-}
オーバーフロー チェックオフ {$Q-}
{$D-} オフのローカル デバッグ シンボル
ランタイム アサーション オフ {$C-}
シンボル参照情報オフ {$L-}
{$J-} オフの書き込み可能な定数
exe off {$Y-} のデバッグ情報
だから私はこれをの一番上に置きますdxBar.pas
:
{$C-,D-,J-,L-,Q-,R-,Y-}
いいえ、成功しません...