次の方法で共有


SetDllDirectoryA 関数 (winbase.h)

アプリケーションの DLL の検索に使用する検索パスにディレクトリを追加します。

構文

BOOL SetDllDirectoryA(
  [in, optional] LPCSTR lpPathName
);

パラメーター

[in, optional] lpPathName

検索パスに追加するディレクトリ。 このパラメーターが空の文字列 ("") の場合、呼び出しは既定の DLL 検索順序から現在のディレクトリを削除します。 このパラメーターが NULL の場合、関数は既定の検索順序を復元します。

戻り値

関数が成功した場合、戻り値は 0 以外です。

関数が失敗した場合、戻り値は 0 です。 拡張エラー情報を取得するには、GetLastError呼び出します。

備考

SetDllDirectory 関数は、LoadLibrary および LoadLibraryEx 関数 後続のすべての呼び出しに影響します。 また、指定したディレクトリが検索パスにある間、安全な DLL 検索モードも効果的に無効になります。

手記

パッケージ化されたプロセスまたは保護されたプロセスを実行 されていない Win32 プロセスの場合、この関数を呼び出すと、関数を呼び出したプロセスから開始された子プロセスの DLL 検索順序にも影響します。

SetDllDirectory呼び出した後、標準の DLL 検索パスは次のようになります。

  1. アプリケーションの読み込み元ディレクトリ。
  2. lpPathName パラメーターで指定されたディレクトリ。
  3. システム ディレクトリ。 GetSystemDirectory 関数を使用して、このディレクトリのパスを取得します。 このディレクトリの名前は System32 です。
  4. 16 ビット システム ディレクトリ。 このディレクトリのパスを取得する関数はありませんが、検索されます。 このディレクトリの名前は System です。
  5. Windows ディレクトリ。 GetWindowsDirectory 関数を使用して、このディレクトリのパスを取得します。
  6. PATH 環境変数に一覧表示されているディレクトリ。
SetDllDirectory 関数が呼び出されるたびに、前の SetDllDirectory 呼び出しで指定されたディレクトリが置き換えられます。 複数のディレクトリを指定するには、AddDllDirectory 関数を使用し、LOAD_LIBRARY_SEARCH_USER_DIRS LoadLibraryEx を呼び出します。

LoadLibrary および LoadLibraryExで使用される標準の検索パスに戻すには、setDllDirectory を NULL で呼び出 。 これにより、SafeDllSearchMode レジストリ値に基づいて、安全な DLL 検索モードも復元されます。

この関数を使用するアプリケーションをコンパイルするには、_WIN32_WINNTを 0x0502 以降として定義します。 詳細については、「Windows ヘッダーの使用」を参照してください。

手記

winbase.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして SetDllDirectory を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows Vista、WINDOWS XP SP1 [デスクトップ アプリのみ]
サポートされる最小サーバー Windows Server 2003 [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー winbase.h (Windows.h を含む)
ライブラリ Kernel32.lib
DLL Kernel32.dll

関連項目

AddDllDirectory の

Dynamic-Link ライブラリの検索順序

GetDllDirectory の

GetSystemDirectory の

GetWindowsDirectory の

LoadLibrary

LoadLibraryEx