LoadLibrary 和 AfxLoadLibrary

进程调用 LoadLibraryLoadLibraryEx 以显式链接到 DLL。 (MFC 应用使用 AfxLoadLibraryAfxLoadLibraryEx。)如果函数执行成功,它会将指定的 DLL 映射到调用进程的地址空间中并返回该 DLL 的句柄。 此句柄可以与其他函数(如 GetProcAddressFreeLibrary)一起在显式链接中使用。 有关详细信息,请参阅显示链接

LoadLibrary 将尝试使用用于隐式链接的相同搜索顺序来查找 DLL。 LoadLibraryEx 使你可以更好地控制搜索路径顺序。 有关详细信息,请参阅动态链接库搜索顺序。 如果系统找不到 DLL 或如果入口点函数返回 FALSE,则 LoadLibrary 将返回 NULL。 如果对 LoadLibrary 的调用所指定的 DLL 模块已映射到调用进程地址空间中,则该函数将返回 DLL 的句柄并递增模块的引用数。

如果 DLL 具有入口点函数,则操作系统将在调用 LoadLibraryLoadLibraryEx 的线程的上下文中调用此函数。 如果 DLL 已附加到进程中,则不会调用此入口点函数。 此情况是由于以前调用 DLL 的 LoadLibraryLoadLibraryEx 函数时没有相应地调用 FreeLibrary 函数。

对于加载 MFC 扩展 DLL 的 MFC 应用程序,我们建议你使用 AfxLoadLibraryAfxLoadLibraryEx,而不是 LoadLibraryLoadLibraryEx。 MFC 函数会在显示加载 DLL 前处理线程同步。 AfxLoadLibraryAfxLoadLibraryEx 的接口(函数原型)与 LoadLibraryLoadLibraryEx 相同。

如果 Windows 无法加载 DLL,则进程会尝试从错误中恢复。 例如,进程会通知用户所发生的错误,并让用户指定 DLL 的其他路径。

重要

请确保指定任何 DLL 的完整路径。 LoadLibrary 加载文件时可能会首先搜索当前目录。 如果不完全限定文件的路径,则可能会加载一个非目标文件。 创建 DLL 时,请使用 /DEPENDENTLOADFLAG 链接器选项来指定静态链接的 DLL 依赖项的搜索顺序。 在 DLL 中,使用显式加载的依赖项和 LoadLibraryExAfxLoadLibraryEx 调用参数的完整路径指定模块搜索顺序。 有关详细信息,请参阅动态链接库安全动态链接库搜索顺序

你希望做什么?

你想进一步了解什么?

另请参阅