9

別の (サードパーティ) アプリケーションにプラグインする DLL を作成しています。DLL は別の DLL セットに依存する必要があります (ライセンス上の理由から、静的にリンクすることはできません)。

DLL を任意のディレクトリに「xcopy でデプロイ可能」にしたいと考えています。また、このディレクトリをパスに追加する必要はありません。

通常の方法で DLL をビルドすると、現在のプロセスの隣にある DLL が見つからないため、Windows は DLL のロードを拒否します。

Windows が DLL を見つけやすくするための適切なオプションはありますか?


いくつかの質問に答えるには:

  • DLL は C++ で記述されています。
  • 追加の DLL は QT-dll です。
  • 追加の DLL をプラグイン DLL と同じフォルダに配置したいと考えています。からそのフォルダの名前を取得できますGetModuleFileName
  • アプリケーションは Firefox で、DLL は PKCS#11 セキュリティ モジュールです。
  • アプリケーションは、DLL へのフル パスを使用して DLL をロードします (プラグインのインストール時にユーザーが指定します)。
  • DLL を System32 またはアプリケーションの隣に配置することを要求することは機能しますが、少し面倒であり、アンインストーラーで問題が発生する可能性があります。
  • LoadLibraryGetProcAddressもちろん機能しますが、私の場合は実際には実現可能ではありません。私は、他の DLL で数千とは言わないまでも、数百のメソッドを使用しています。本当に import-libraries を使う必要があります。

SetDllDirectoryDllMainと組み合わせて、遅延ロードされた dll を使用することを考えていました。誰もこのようなことを試しましたか?

4

3 に答える 3

4

3通り考えられます。

  1. アプリケーションと同じフォルダに dll を配置します (これはできませんか?)
  2. ランタイム リンクを使用します。 LoadLibrary()GetProcAddress()
  3. マニフェストhttp://msdn.microsoft.com/en-us/library/aa374182(VS.85).aspxを使用する

しかし、dll が .exe と同じフォルダーにない場合、その場所をどのように知るのでしょうか? Windows が認識していないことを忘れてください。

于 2010-02-05T09:58:21.650 に答える
1

LoadLibrary()のパラメータとしてdllのパスを指定できます。

于 2010-02-05T14:37:54.860 に答える
0

もう 1 つのオプションは、PATH 変数を変更することです。メイン アプリを起動するためのバッチ ファイルを用意し、PATH=%PATH%;%~dp0 を設定します。これにより、最小のフットプリントが確保され、実行後にシステムに追加のトレースが残ることはありません。

于 2017-05-08T15:34:29.863 に答える