SetDllDirectoryA 函数 (winbase.h)

将目录添加到用于查找应用程序的 DLL 的搜索路径。

语法

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

参数

[in, optional] lpPathName

要添加到搜索路径的目录。 如果此参数为空字符串(“),则调用将从默认 DLL 搜索顺序中删除当前目录。 如果此参数为 NULL,则该函数将还原默认搜索顺序。

返回值

如果函数成功,则返回值为非零。

如果函数失败,则返回值为零。 若要获取扩展的错误信息,请调用 GetLastError

言论

SetDllDirectory 函数会影响对 LoadLibraryLoadLibraryEx 函数的所有后续调用。 当指定的目录位于搜索路径中时,它还有效禁用安全 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

若要还原到 LoadLibraryLoadLibraryEx所使用的标准搜索路径,请使用 NULL 调用 SetDllDirectory。 这也基于 SafeDllSearchMode 注册表值还原安全 DLL 搜索模式。

若要编译使用此函数的应用程序,请将_WIN32_WINNT定义为0x0502或更高版本。 有关详细信息,请参阅 使用 Windows 标头

注意

winbase.h 标头将 SetDllDirectory 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 具有 SP1 的 Windows Vista、Windows XP [仅限桌面应用]
支持的最低服务器 Windows Server 2003 [仅限桌面应用]
目标平台 窗户
标头 winbase.h (包括 Windows.h)
Kernel32.lib
DLL Kernel32.dll

另请参阅

AddDllDirectory

Dynamic-Link 库搜索顺序

GetDllDirectory

GetSystemDirectory

GetWindowsDirectory

LoadLibrary

LoadLibraryEx