3

単純な「HelloWorld」win32 コンソール アプリケーションを実行しようとすると、「dll が見つかりません: アプリケーションを再起動すると問題が解決する可能性があります」というエラーが表示されます。.dll の場所はわかっています。コマンド プロンプトから .exe を実行するときにその場所を指定する方法は?

PS: .dll を .exe の現在のディレクトリにコピーすると問題が解決するようですが、この方法はこの場合には適していません。

4

4 に答える 4

5

DLL の読み込みは、Windows の配管の奥深くで行われます。

アプリケーションと同じディレクトリに DLL が見つからない場合、ディレクトリを見つけるために PATH が自動的にスキャンされます。

したがって、問題に対する最も簡単な答えは、DLL を含むディレクトリを PATH に追加することです。コードでいつ DLL をロードする必要があるかによって、"HelloWorld" アプリケーション内から PATH を (一時的に) 変更できる場合があります。

于 2009-03-29T09:07:05.300 に答える
2

パスを Windows PATH に手動で永続的に追加するには (永続的に = 削除するまで)、[マイ コンピューター] を右クリックし、[プロパティ] > [詳細設定] > [環境変数] > [システム変数] > [パス] > [編集] > [変数値] を選択し、セミコロンを追加します (つまり、「さらにto all before") を開き、dll のフル パスを貼り付けます。

Windows は、現在のディレクトリで何かが見つからないたびにパスを検索します。

于 2009-09-22T19:05:52.893 に答える
2

LoadLibraryExのドキュメントには、Windows が dll を検索する方法についての説明があります。DLL へのフル パスを作成できる場合は、LOAD_WITH_ALTERED_SEARCH_PATH フラグを使用するか、SetDllDirectory関数を使用して検索パスにディレクトリを追加してみてください。

于 2009-03-29T09:12:10.810 に答える
1

から: http://msdn.microsoft.com/en-us/library/7d83bc18.aspx

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

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

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

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

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

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

于 2014-03-20T09:31:51.867 に答える