5

他社のアプリケーション用のプラグインを持っています。私のプラグインは Qt を使用しているため、Qt DLL が必要です。私の問題は、4.x Qt DLL のすべてのバージョンが同じように呼ばれていることです (例: QtCore4.dll)。他のプラグイン、またはそれ自体を PATH 環境変数に挿入した別のアプリケーションが Qt dll をアプリケーション フォルダーに配置した可能性は十分にあります。その場合、プラグインは別のバージョンの DLL を想定しているため、起動しません。

  • Q1. DLL 展開の推奨される一般的な方法は何ですか?
  • Q2. ホスト アプリケーションが別のバージョンの Qt を使用している場合はどうなりますか。Windows では、ホスト アプリケーションとプラグインが異なるバージョン () を使用できますか?

ありがとう!

4

6 に答える 6

3

A1: ベスト プラクティス: DLL を実行可能ファイルのディレクトリに配置します。DLLをロードするために最初にそこを探します。これは一般的な方法です。

A2: なんらかの理由でアプリケーションが別のバージョンの Qt を使用し、記述しているモジュールが新しいバージョンまたは特定のバージョンを必要とする場合、問題が発生する可能性があります (動作しない、クラッシュするなど)。

静的リンクでは、Qt のライセンス制限も考慮する必要があります。ライブラリが実行時に動的にロードされ、アプリケーションから分離できる限り、LGPL は満足です。これは、ソースなどを公開しない場合にのみ適用されます。

また、インストーラーはこれらのファイルへのアクセスを設定して、他の不正なアプリケーションによって上書きされないように保護する必要があります。

于 2009-09-30T12:09:27.673 に答える
3

この問題で他の人を助けるために: QT DLL は、すべての 4.X バージョンで同じ (または少なくともバイナリ互換) であることが保証されています。(すべての 3.X バージョンなどで同じ) したがって、問題はありません。これは、Qt dll の命名に 2 番目の番号がない理由でもあります。

于 2009-11-20T12:05:53.130 に答える
1

XP以降のバージョンのWindows(つまり、XP、2003、Vista、2008、およびWin7)では、サイドバイサイドアセンブリまたはDLLリダイレクトを使用できます。いずれの場合も、基本的には、実行可能ファイルと同じディレクトリに含まれているDLLの特定のバージョンを使用する必要があることをオペレーティングシステムに通知する小さなテキストファイルを含めます。

これらはあまり知られていない機能ですが、「DLL地獄」からあなたのお尻を本当に救うことができます。

于 2009-09-29T19:05:29.350 に答える
0

ティムが言ったように、作成しているアプリ/プラグインと同じディレクトリにDLLをデプロイする必要があります。PATH 変数は、プログラムが QT4 dll を検索する最初の場所ではないため、同じフォルダーに展開すると、アプリはアプリと同じフォルダーを取得し、PATH にあるものを無視します。

Q1: 過去には、誰もが DLL を system32 フォルダーに放り込んだように見えました。なぜなら、それが PATH にあり、プログラムがそこにあることを知っていたからです。ユーザーの観点からは、何かをアンインストールしたいときにクリーンアップするのは非常に難しいと思います。そして今、ストレージの価格が低いので、特に複数のバージョンが存在する可能性があるこのような場合は、DLL をアプリに保持することをお勧めします。私は専門家ではありませんが、これは Java アプリケーションの jar ファイルを処理する方法です。

Q2: そう思います。アプリとプラグインのディレクトリ構造によって異なります。プラグインに使用するバージョンを指定できます。アプリのバージョンも特別な場所に既にあると確信しています。

于 2009-05-15T15:53:03.110 に答える
0

安全のために、アプリケーションが使用したい dll バージョンを使用していることを確認する必要があります。Windows は、アプリケーション フォルダを最初に検索することが保証されています。したがって、すべてのバイナリ依存関係をそこに置く必要があります。

エクスプローラーでアプリをダブルクリックしてもアプリが実行されない場合、必要な dll が Windows によって通知されます。その dll をアプリケーション フォルダーにコピーします。アプリケーションが実行されている場合は、次のステップに進みます。

ここで、アプリケーション フォルダに配置した dll を 1 つずつ一時的に削除 (または名前を変更) し、そのたびにアプリケーションをダブルクリックする必要があります。Windows が文句を言わない場合は、dll が別の場所で見つかりました。その DLL を PATH 環境から取り出します (おそらく一時的に)。Rapid Environment Editor は、編集環境変数をすぐに有効にする無料のユーティリティです。

アプリケーションがアプリケーション ディレクトリ内の dll を使用し、他の場所から dll を取り込まないことが確実な場合にのみ、PATH 変数の編集を再度開始して、古い状況を復元することができます。

于 2015-12-02T21:55:24.650 に答える
0

Qt と静的にリンクすることを選択する方法はありませんか?

アプリ/プラグインと同じディレクトリに DLL をデプロイします。

ただし、これは他の懸念には答えません。

于 2009-05-15T14:02:48.383 に答える