向用于应用程序的 DLL 的搜索路径添加一个目录,以方便搜索DLL。
句法BOOL SetDllDirectoryA([in, optional] LPCSTR lpPathName);
[in, optional] lpPathName
要添加到搜索路径的目录。如果此参数为空字符串 (""),则调用将从默认 DLL 搜索顺序中删除当前目录。如果此参数为 NULL,则该函数将恢复默认搜索顺序。
返回值如果函数成功,则返回值非零。
如果函数失败,则返回值为零。要获取扩展错误信息,请调用 GetLastError。
说明该 SetDllDirectory会功能会影响到所有后续调用 的LoadLibrary和 LoadLibraryEx功能。当指定目录在搜索路径中时,它还有效地禁用安全 DLL 搜索模式。
对于未运行打包或受保护进程的Win32 进程,调用此函数还会影响从调用该函数的进程开始的子进程的 DLL 搜索顺序。
调用 SetDllDirectory 后,标准的 DLL 搜索路径为:
- 应用程序加载的目录。
- lpPathName参数指定的目录。
- 系统目录。使用 GetSystemDirectory函数获取该目录的路径。该目录的名称是 System32。
- 16 位系统目录。没有获取这个目录路径的函数,但是会搜索。该目录的名称是 System。
- Windows 目录。使用 GetWindowsDirectory函数获取该目录的路径。
- 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 版本。将编码中立的别名与非编码中立的代码混合使用会导致不匹配,从而导致编译或运行时错误。有关更多信息,请参阅函数原型约定。