問題タブ [delphi-units]
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 - ユニットが自分のファイルの「異なるバージョンでコンパイル」されているのはなぜですか?
プラグインを使用するプログラムを作成しています。残念ながら、プラグイン フレームワークの動的リンクにより、RTL と VCL がプロジェクト EXE から強制的に BPL バージョンに移動され、デバッグ情報が有効になりません。
そこで、プラグインに静的にリンクするテスト フレームワークを構築して、コードをトレースしながら自分が何をしているかを実際に確認できるようにしました。しかし今、再コンパイルしようとするたびに、「ユニット turbu_skills は異なるバージョンの turbu_database.GDatabase でコンパイルされました」というエラーが表示されます。
このエラーは以前にも見たことがありますが、RTL ライブラリや VCL ライブラリなど、変更すべきではないものを変更したときだけです。自分のコードでそれを行う理由がわかりません。turbu_skills ユニットと turbu_database ユニットは、どちらも私が書いたユニットです。GDatabase はグローバル シングルトン変数であり、そのクラス定義は何週間も変更していません。どちらのユニットにも何も触れていなくても、再コンパイルを引き起こす変更により、このエラーが発生します。
フル ビルド (SHIFT-F9) を実行すると、正しくコンパイルされます。しかし、ユニット (任意のユニット) でSPACEを押して F9 を押すと、再びエラーが発生します。どうすれば停止できますか? これはメイン アプリでは発生せず、テスト フレームワークでのみ発生します。
編集:すべてのユニットのソースがあります。DCU や同様のファイルを削除しても役に立ちません。プロジェクト全体を別のコンピューターにコピーし、すべての DCU を削除して、そこでビルドしても役に立ちません。プログラムのレイアウトとコンパイラーの間に客観的で再現可能な競合があり、それを取り除きたいと思っています。
ソースはhttp://www.turbu-rpg.com/downloads/Turbu_source_setup.exeで見つけることができます。JVCL がすでにインストールされている Delphi 2009 が必要です。残りはインストーラー パッケージが処理します。ソースコードを入手できると、誰かがこれを追跡するのに役立つかもしれません。問題がどこにあっても、それは私を超えているので、私は確かにそう願っています。この問題は、testing.exe と turbu.groupproj の turbu.exe で見つけることができます。
編集 2: これは別のクロスユニット ジェネリックの問題であることが判明しました。ぐら。回避策をコーディングすることができました。ジェネリックの問題がすぐに修正されることを願っています。
delphi - 相互に使用するクラスの循環参照の問題
次の2つのクラスがあります。
TcmDataPanel は (第 3 世代) TFrame の子孫です。直接使用されるのではなく、複数の他の複合コンポーネントが派生します。
TcmDataConnector は、これらの他のコンポーネントのデータベース接続情報を保持するコンポーネントです。
私は ModelMaker を使用しており、オブザーバー パターンを実装して、「データ コネクタ」の状態が変わるたびに複数の「データ パネル」を自動的に更新できるようにしようとしています。
これが私の問題です。各クラスがインターフェイスセクションで他のクラスを使用しているため、「循環参照」の問題を回避できないようです。関連する「uses」参照を Interface セクションに配置しても、「宣言されていない識別子」の問題は解決されず、両方を同じユニットに配置しても解決されません。現在、それらは同じユニットにあり (別々のユニットで、一緒に試しました)、「宣言されていない識別子: TcmTPDataConnector」エラーが発生します。
どうすればこれを回避できますか?
================
更新:
私がいるのは金曜日の夜の午後 9 時 30 分で、完全に立ち往生していました。私の投稿からわずか数分後、あなたはその日を救った!! (夜!) ありがとう!!
男、私はStackOverflowが大好きです....だから、この学習のようなクレイジーな季節の私の友人です。: ) ありがとう、ありがとう、ありがとう...
delphi - Delphi でユニット ファイルを使用する方法
コードをよりカプセル化するために、個別のユニットのコツをつかもうとしているだけです。メソッドの public/private 宣言を整理して、を使用する他のユニットから呼び出すことができるようにしようとしていますtestunit
。この例では、公開したいhellofromotherunit
がstickletters
非公開にしたい。
次のように、他のユニットからプライベート/パブリック構造をコピーできなかったようです。
delphi - Delphi の他のユニットから型を定義する
ここでローレン・ペクテルが言ったように 、問題は私にとってAとBが異なるユニットにあるということです。では、別のクラスの既存のものから型定義を定義する方法はありますか?
delphi - 削除されたユニットがまだ他のユニットで使用されている場合、uses 句をクリーンアップすると違いはありますか?
個人的には、uses
句ができるだけ小さい方が好きですが、多くのアプリケーションでは、(実行可能ファイルを肥大化させるという点で) 本当に大きなユニットが好きであるForms
かVirtualTrees
、少なくとも別のユニットが必要です。
uses
では、最終的にプロジェクトからユニットが削除されなくても、条項を削除しても違いはありますか? もしそうなら:どのように?そして:uses
節の掃除はできるだけ早くするべきですか、それとも未使用のユニットが偶然見つかるまで待つことができますか?
delphi - Delphiの「重複」ユニットを名前で、コンポーネントによって参照され、コンパイルに問題があります
さまざまなベンダーのいくつかのコンポーネントパッケージを使用しており、そのうちの2つには、ディレクトリ構造内で使用可能な「regexp.pas」ユニットがあります。
ここでの問題は、コンパイルする順序に関係なく、ユニットの1つが、他のさまざまなユニットの間違ったバージョンでコンパイルされていることについて不平を言うことです。
これを正しく処理する方法はありますか?
delphi - VCLから特定のユニットを再コンパイルするにはどうすればよいですか?
QCからDelphi2009ユニット(発生した場合はDBClient)に修正を適用したいと思います。ユニットを別のディレクトリにコピーして、コピーに変更を加える必要があることはわかっています。次に、Delphiにそのユニットをコンパイルさせ、既存のDCUを優先して使用するにはどうすればよいですか?
delphi - 別のユニットからプロシージャを実行するにはどうすればよいですか?
さて、この種のn00bの質問ですが、それでも理解できません。main
手順のあるユニットがありますDiscard()
。今、私は別のユニットを持っており、それからユニットのengine
手順を実行したいと思います。のセクションにメインがあります。プロシージャを呼び出そうとしましたが、うまくいきませんでした。私は何が間違っているのですか?Discard()
main
uses
engine.pas
main.Discard()
windows - WindowsユニットでCloseComm、OpenComm、WriteComm、およびReadCommを行うにはどうすればよいですか?
WinTypes、WinProcs を使用する古い通信ユニットがあります。私が理解しているように、これらはWindowsユニットにもマージされました。Windows ユニットに同様の機能はありますか?
delphi - ユニットファイル内のユニットファイルパスで使用
問題があります。説明してみます。
クラスがあり、新しい機能を持つ可能性のあるユニットがあります。
D3BF4E849ACC45249B990F802EFB1F15\UnitFile1.pas 8DC8977E7A7B469AACFE3CC77CA7075E\UnitFile1.pas
どちらも同じクラスです: IClass_1 = クラス
このファイルのさまざまなバージョンにコード番号を使用しています。
別のユニット ファイル (UnitFile2.pas) は、そのユニット ファイル (UnitFile1.pas) を使用します。
また、2 番目のユニット ファイル (UnitFile2.pas) には異なるバージョンがあります。
F94C439C822E490DB228F2C16EF2C190\UnitFile2.pas 14CEEFAFF1D64DDD8CBDEDD334D4A3FF\UnitFile2.pas
どちらも同じクラス: IClass_2 = class(IClass_1)
今問題が始まります。
「F94C439C822E490DB228F2C16EF2C190\UnitFile2.pas」には「D3BF4E849ACC45249B990F802EFB1F15\UnitFile1.pas」が必要です
「14CEEFAFF1D64DDD8CBDEDD334D4A3FF\UnitFile2.pas」には「8DC8977E7A7B469AACFE3CC77CA7075E\UnitFile1.pas」が必要です
ただし、ファイル名は同じです(このようなシステムが必要です。したがって、同じです)。ユニット ファイルでは、delphi ではそのように書くことはできません。
ファイル F94C439C822E490DB228F2C16EF2C190\UnitFile2.pas 内。「D3BF4E849ACC45249B990F802EFB1F15\UnitFile1.pas」の UnitFile1 を使用します。
私の問題を教えていただければ幸いです。どのユニット ファイルをそのパスで使用するかをコンパイラに伝えるにはどうすればよいですか? (私はDelphi-7を使用しています)