私のコードでは LoadLibraryA("someDLL.dll"); を使用しています。ファイル someDLL.dll の検索を開始するパスは何ですか?もう 1 つの質問: LoadLibraryA 関数は大文字と小文字を区別しますか?つまり、SomeDLL.dll がある場合、それは読み込まれませんか?
2 に答える
MSDN ライブラリの記事Dynamic-Link Library Search Orderでは、 SafeDllSearchModeが有効になっている場合のデスクトップ アプリケーションの検索順序が指定されています。これは、Windows XP SP2 以降の既定です。
- アプリケーションのロード元のディレクトリ。
- システム ディレクトリ。GetSystemDirectory 関数を使用して、このディレクトリのパスを取得します。
- 16 ビット システム ディレクトリ。このディレクトリのパスを取得する機能はありませんが、検索されます。
- Windows ディレクトリ。GetWindowsDirectory 関数を使用して、このディレクトリのパスを取得します。
- 現在のディレクトリ。
- PATH 環境変数にリストされているディレクトリー。これには、App Paths レジストリ キーで指定されたアプリケーションごとのパスは含まれないことに注意してください。DLL 検索パスを計算する場合、App Paths キーは使用されません。
LoadlLibrary
記事は備考で検索順序を指定します:
lpFileNameにパスが含まれておらず、同じベース名と拡張子を持つロードされたモジュールが複数ある場合、関数は最初にロードされたモジュールへのハンドルを返します。
lpFileNameパラメーターでファイル名拡張子が指定されていない場合、デフォルトのライブラリ拡張子.dllが追加されます。ただし、ファイル名の文字列には、モジュール名に拡張子がないことを示す末尾の文字(。)を含めることができます。パスが指定されていない場合、関数は、ベース名がロードされるモジュールのベース名と一致するロードされたモジュールを検索します。名前が一致する場合、ロードは成功します。それ以外の場合、関数はファイルを検索します。[...]
DLLの検索順序の詳細については、ダイナミックリンクライブラリの検索順序を参照してください。
ファイル名では大文字と小文字が区別されないため、NTFSおよびFATファイル名では大文字と小文字が区別されます。大文字と小文字を区別しないことが基本的なルールです。
命名規則
次の基本的なルールにより、アプリケーションは、ファイルシステムに関係なく、ファイルとディレクトリの有効な名前を作成して処理できます。[...]
大文字と小文字を区別しないでください。