2

私のコードでは LoadLibraryA("someDLL.dll"); を使用しています。ファイル someDLL.dll の検索を開始するパスは何ですか?もう 1 つの質問: LoadLibraryA 関数は大文字と小文字を区別しますか?つまり、SomeDLL.dll がある場合、それは読み込まれませんか?

4

2 に答える 2

4

MSDN ライブラリの記事Dynamic-Link Library Search Orderでは、 SafeDllSearchModeが有効になっている場合のデスクトップ アプリケーションの検索順序が指定されています。これは、Windows XP SP2 以降の既定です。

  1. アプリケーションのロード元のディレクトリ。
  2. システム ディレクトリ。GetSystemDirectory 関数を使用して、このディレクトリのパスを取得します。
  3. 16 ビット システム ディレクトリ。このディレクトリのパスを取得する機能はありませんが、検索されます。
  4. Windows ディレクトリ。GetWindowsDirectory 関数を使用して、このディレクトリのパスを取得します。
  5. 現在のディレクトリ。
  6. PATH 環境変数にリストされているディレクトリー。これには、App Paths レジストリ キーで指定されたアプリケーションごとのパスは含まれないことに注意してください。DLL 検索パスを計算する場合、App Paths キーは使用されません。
于 2012-12-25T15:32:49.003 に答える
2

LoadlLibrary記事は備考で検索順序を指定します:

lpFileNameにパスが含まれておらず、同じベース名と拡張子を持つロードされたモジュールが複数ある場合、関数は最初にロードされたモジュールへのハンドルを返します。

lpFileNameパラメーターでファイル名拡張子が指定されていない場合、デフォルトのライブラリ拡張子.dllが追加されます。ただし、ファイル名の文字列には、モジュール名に拡張子がないことを示す末尾の文字(。)を含めることができます。パスが指定されていない場合、関数は、ベース名がロードされるモジュールのベース名と一致するロードされたモジュールを検索します。名前が一致する場合、ロードは成功します。それ以外の場合、関数はファイルを検索します。[...]

DLLの検索順序の詳細については、ダイナミックリンクライブラリの検索順序を参照してください。

ファイル名では大文字と小文字が区別されないため、NTFSおよびFATファイル名では大文字と小文字が区別されます。大文字と小文字を区別しないことが基本的なルールです。

命名規則

次の基本的なルールにより、アプリケーションは、ファイルシステムに関係なく、ファイルとディレクトリの有効な名前を作成して処理できます。[...]

大文字と小文字を区別しないでください。

于 2012-12-25T15:11:25.640 に答える