0

C++ プロジェクトで使用する必要があるサード パーティ製ライブラリ (tp.lib など) とサード パーティ製 dll (tp.dll など) があります (私のプロジェクトでは dll を作成し、my.dll と呼びます)。

ヘッダー ファイルに #pragma comment(lib, "libraryname") を使用してライブラリを含め、C++ Visual Studio プロジェクトの構成プロパティ -> リンカー -> 追加のライブラリ ディレクトリにライブラリ ファイルのパスを含めました。

コードは正常にコンパイルおよびリンクされます。しかし、実行に失敗します。何かが足りないかどうかを確認するために依存を使用したとき、tp.dll が見つからないことがわかりました。tp.dll は、tp.lib と同じライブラリ フォルダーにあります。

tp.dll が my.dll に含まれるようにするにはどうすればよいですか?

4

3 に答える 3

1

DLL の検索パスは異なります。ドキュメントから以下を引用:

暗黙的なリンクと明示的なリンクの両方で、Windows は最初に Kernel32.dll や User32.dll などの "既知の DLL" を検索します。次に、Windows は次の順序で DLL を検索します。

  1. 現在のプロセスの実行可能モジュールが配置されているディレクトリ。

  2. 現在のディレクトリ。

  3. Windows システム ディレクトリ。GetSystemDirectory 関数は、このディレクトリのパスを取得します。

  4. Windows ディレクトリ。GetWindowsDirectory 関数は、このディレクトリのパスを取得します。

  5. PATH 環境変数にリストされているディレクトリー。

注 LIBPATH 環境変数は使用されません。

于 2012-10-10T15:41:05.287 に答える
0

「dllを別のdllに含める」ことはできません。それらを一緒に展開するか、依存関係の dll をWindows が見つけられる場所に配置する必要があります。

于 2012-10-10T15:38:32.113 に答える
0

実行時の検索パスには、lib ライブラリを配置するフォルダーが含まれていないため、DLL を lib に配置しても、OS は実行時にそれを見つけることができません。それをパスに追加するか、DLL を移動できます。検索の優先順位のリストは MSDN にあります。

于 2012-10-10T15:37:19.987 に答える