問題タブ [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.

0 投票する
2 に答える
482 参照

delphi - F2051 ユニットが別のバージョンでコンパイルされました (再度)

(警告: 長文を読んでください。この質問は、F2051 に関する他の多くの質問を参照しています)

ソース ツリーに PatchLibs という名前のフォルダーがあり、そこにサード パーティ ソースの変更されたファイルを置きます。
これはプロジェクトの検索パスにあります。..\Skin;..\PatchLibs

私はファイル dxBar.pas を DevExpress コントロールから Patchlibs にコピーし、実装セクションの一部のコードのみを変更しました。

さて、ビルドすると(すべてのローカル.dcuファイルが削除され、「クリーンアップ」されます)、悪名高いものになります:

コード行を参照しません。コンパイルを開始すると、メッセージが表示されます。

構成:

  • 新しい VM にインストールされた新しい Delphi および DevExpress バージョン。プログラムソースツリーをコピーしました。

  • C:\DelphiLibs\DevExpress\VCL\Library\RS2732ビットライブラリパスにあります

  • そのフォルダーには、すべての DevExpress dcu が含まれています。特にcxBarEditItem.dcudxBar.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.pasPatchlibs にプルすると、エラーは別のユニットに (繰り返し) 伝播するだけです。

多くの回答を読んだにもかかわらず (注目すべき SO の質問:なぜ私のユニットは自分のファイルの「別のバージョンでコンパイルされているのですか?」 ) 、エラーが発生する理由と今回はそれを修正する方法がわかりません。インターフェイスの Uses セクションにあり
cxBarEditItem.pas、Uses 句にありますが、なぜ再コンパイルする必要があるのでしょうか?dxBarcxBarEditItem

もちろん、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 オプションの設定とコンテンツの関係。 次に、それらの設定をプロジェクトの設定と比較したところ、次の違いが見つかりました (無関係な行は削除されています)。PackagescxLibraryRS27.dprojdxBarRS27.dprojcxLibraryRS27
.dproj.dproj
cxLibraryRS27.dproj

彼らはこれを余分に持っていました:

この余分なものがありました:

そして彼らはこのPropertyGroupを持っていませんでした

これらを調べてみると、これらは設定が異なり、生成された.dcuファイルに影響を与える可能性があると思います。

  • 範囲チェックオフ {$R-}

  • オーバーフロー チェックオフ {$Q-}

  • {$D-} オフのローカル デバッグ シンボル

  • ランタイム アサーション オフ {$C-}

  • シンボル参照情報オフ {$L-}

  • {$J-} オフの書き込み可能な定数

  • exe off {$Y-} のデバッグ情報

だから私はこれをの一番上に置きますdxBar.pas

{$C-,D-,J-,L-,Q-,R-,Y-}

いいえ、成功しません...