11

作成したカスタムコンポーネントのパッケージを作成しようとしています。これは、Graphics32、GraphicEx、CCR.Exifなどのいくつかのライブラリに基づいています。

パッケージプロジェクトを作成し、Registerプロシージャを含むユニットを作成し、Delphiが通知したいくつかの追加の参照をrequiresセクションに追加しました(dbrtl.dcp、inet.dcp、soaprtl.dcp、vclimg.dcp、xmlrtl.dcp、dclGraphicEx140など)。 dcp)を追加し、containsセクションに多くのユニットを追加して、暗黙的に発生することに関する警告を回避しました。プロジェクトはコンパイルされ、問題なく自分のマシンにインストールして使用できます。しかし、別のマシンにインストールしたい場合、トラブルが発生します。最終的に、使用したすべてのサードパーティコンポーネントからすべてのDCUをコピーする必要がありました。さらに、GraphicExからDCPとBPLの両方をコピーする必要があり、それらもインストールする必要がありました。

大量のファイルを提供するのは面倒ですが、乗り越えられますが、他のパッケージもインストールする必要はありません。containsセクションにさらに多くのユニットを配置することで、そのDCPとBPLを取り除くことができましたが、GraphicExが実際にインストールされている自分のマシンでエラーメッセージが表示されました。Graphics32ではそのようなことは何も起こらないので、これは私を混乱させます...

とにかく、配布を最小限に抑え、そのような状況を回避するにはどうすればよいですか?チームの他の開発者が、私がパッケージを構築するために使用したものを気にせずにパッケージを使用できるようにしたいと思います。まず、すべてのサードパーティユニットを自分のDCUにコンパイルすることはできませんか?

4

4 に答える 4

2

あなたが経験したことは、コンポーネントを書く人にとっては普通のことです。配信はいつも通りです。パッケージは、それらを参照している限り、他のパッケージを保持しません。それは彼らの性質にあります。

このような状況を克服するために、私は常にコンポーネントを販売する製品と同じように扱います。パッケージに必要なものすべてを配布および登録するセットアップ ウィザードを作成します。

私の場合、InnoSetup は非常にうまく機能します ( http://www.jrsoftware.org/isinfo.php )。

于 2013-08-13T11:39:22.763 に答える
0

AlexSC が最良の答えだと思いますが、依存関係のないカスタム コンポーネントがどうしても必要な場合は、別の方法があると思います。

少し前に、開発者向けの社内コンポーネントを作成しようとしたときに、Delphi 依存関係のフラストレーションに遭遇しました。私のおすすめ:

  1. コンポーネントが使用するすべての依存関係をアンインストールします

  2. コンポーネント パッケージで、パッケージの requires セクションから上記の dcp を削除します。

  3. 依存関係のソース ファイルをコンポーネントにコピーする

コンポーネントを配布するときは、必要な依存関係のコードとともに配布する必要があります

Delphi では、インストールされたパッケージでユニット名を重複させることが許可されていないため、依存関係を個別に使用する場合は問題が発生します。

また、DCU を使用したくない理由は、DCU が特定のプラットフォームとコンパイラ用にコンパイルされているという事実です。そのため、すべてのデボルパーが同じバージョンの Delphi を使用する同じプラットフォーム上にあることが確実でない限り、依存コードを再コンパイルする必要があります。

繰り返しになりますが、AlexSC が最良の答えを示しており、InnoStudio は優れた小さなツールです。

于 2013-11-09T14:38:16.830 に答える
0

Thijs、パッケージだけではそれを行うことはできません。対象の開発者は、パッケージに追加したほとんどすべてのものを必要とします。ただし、別の方法があります。独自のコンポーネントで使用しているすべてのコンポーネント/ライブラリを使用して DLL を構築し、これらすべての外部コンポーネント/ライブラリを DLL からエクスポートするコードにラップします。次に、外部コンポーネントを直接使用せずに、作成した DLL を使用してコンポーネントをビルドします。コンポーネント内で、他の外部コンポーネント/ライブラリのユニットを「使用」することはできません。DLL からエクスポートするすべてのデータ型と必要な宣言を使用して、新しいユニットを構築する必要があります。これはすべて完全に機能していますが、多数の外部コンポーネントまたはライブラリの場合、すぐに非常に複雑になります。

于 2013-04-28T16:53:32.373 に答える
0

概要

しばらく Delphi を使用していませんでしたが、カスタム ビジュアル コントロールを開発しました (私が使用した最後のバージョンは Delphi 6 でした)。

パッケージの依存関係を扱う場合、2 つの問題があります。1 つは、Delphi 環境にインストールして、コントロールをコンポーネント パレットに表示し、さらにコンポーネント エディタとプロパティ エディタを作成する方法です。

もう 1 つは、コンパイルされたパッケージを顧客のマシンに配布する場合です。

また、実行している Delphi のバージョンによっても異なります。

設計時間

カスタム パッケージを開発する場合、宛先フォルダーを示すパッケージ オプションのタブがあります。

マニュアルは通常、開発者にこれらのテキストボックスを空のままにしておくように指示しています。それはうまくいくこともあれば、うまくいかないこともあります。それぞれのテキスト ボックスに、各フォルダー パスを明示的に書き込みます。

「 .dcp」ファイル用のテキストボックス パス、「. dcu」用のテキスト ボックス パスなどがあります。

ビジュアル コントロールや、プロパティ エディターやコンポーネント エディターなどがある場合は、コードを 2 つのパッケージ (「ランタイム」と「デザインタイム」) に分割することをお勧めします。

私は通常、デルファイ (パッケージ) プロジェクトをデルファイのインストール フォルダの外に置きます。

実行時間

通常、「*.bpl」「.dcp」ファイルを Windows (32)/システム フォルダ、または同様の「DLL」Windows フォルダに配置するのが手っ取り早い方法です。


パッケージ フォルダー構造のソース コードの提案

パッケージの管理は難しい場合があります。Embarcadero と新しいバージョンの Delphi で、インストール プロセスがどの程度変更されたかはわかりません。次の図は、ソース コードを整理する方法の例です。それが役に立てば幸い。

[-]--+--c:
.....|
.....+--[-]--+--software
.............|
.............+--[+]-----java
.............|
.............+--[+]-----php
.............|
.............+--[-]--+--delphi (not the delphi folder in program files)
.....................|
.....................+--[+]-----apps (source code for delphi programs)
.....................|
.....................+--[+]-----other
.....................|
.....................+--[-]--+--packages (all delphi packages source code here)
.............................|
.............................+--[+]-----lib (a single package for non visual controls, libraries)
.............................|
.............................+--[+]-----tools (package pair for non visual tcomponent descendants)
.............................|
.............................+--[+]-----json (example)
.............................|
.............................+--[+]-----xml (example)
.............................|
.............................+--[-]--+--mycontrols (folder custom visual controls)
.............................|.......|
.............................|.......+--[-]--+--delphi40 (folder for delphi40 version of "mycontrols")
.............................|.......|.......|
.............................|.......|.......+----------dsgvclctrls40.dpk (design-time package "mycontrols")
.............................|.......|.......|
.............................|.......|.......+----------runvclctrls40.dpk (run-time package "mycontrols")
.............................|.......|.......|
.............................|.......|.......+--[+]--+--demos (individual example for each "mycontrol")
.............................|.......|.......|
.............................|.......|.......+--[+]--+--design ("*.pas" component editors  destination folder)
.............................|.......|.......|
.............................|.......|.......+--[+]--+--sources ("*.pas" source code destination folder)
.............................|.......|.......|
.............................|.......|.......+--[+]--+--bin ("*.dcu" destination folder)
.............................|.......|........
.............................|.......+--[+]--+--delphi50 (folder for delphi50 version of "mycontrols")
.............................|.......|........
.............................|.......+--[+]--+--delphi60 (folder for delphi60 version of "mycontrols")
.............................|.......|........
.............................|.......+--[+]--+--delphi70 (folder for delphi70 version of "mycontrols")
.............................|................
.............................+--[-]-----etc...

乾杯。

于 2012-03-24T21:43:22.443 に答える