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

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

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

注意

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

要求

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

另请参阅

AddDllDirectory

动态链接库搜索顺序

GetDllDirectory

GetSystemDirectory

GetWindowsDirectory

LoadLibrary

LoadLibraryEx