LoadLibrary 和 AfxLoadLibrary
更新:2007 年 11 月
进程调用 LoadLibrary(或 AfxLoadLibrary)以显式链接到 DLL。如果成功,函数将指定的 DLL 映射到调用进程的地址空间中并返回此 DLL 的句柄,该句柄可与用于显式链接的其他函数(如 GetProcAddress 和 FreeLibrary)一起使用。
LoadLibrary 尝试使用用于隐式链接的同一搜索序列来定位 DLL。如果系统无法找到 DLL 或者入口点函数返回 FALSE,LoadLibrary 将返回 NULL。如果对 LoadLibrary 的调用所指定的 DLL 模块已映射到调用进程的地址空间中,则函数仅返回 DLL 的句柄并递增模块的引用数。
如果 DLL 有入口点函数,则操作系统在调用 LoadLibrary 的进程上下文中调用此函数。如果由于以前调用了 LoadLibrary 但没有相应地调用 FreeLibrary 函数而导致 DLL 已经附加到进程,则不会调用此入口点函数。
加载扩展 DLL 的 MFC 应用程序应使用 AfxLoadLibrary,而不应使用 LoadLibrary。AfxLoadLibrary 在调用 LoadLibrary 之前将处理线程同步。AfxLoadLibrary 的接口(函数原型)与 LoadLibrary 相同。
如果出于某种原因 Windows 无法加载 DLL,进程可以尝试从错误恢复。例如,进程可通知用户所发生的错误,并让用户指定 DLL 的其他路径。
安全说明: |
---|
如果代码要在 Windows NT 4、Windows 2000 或 Windows XP(SP1 以前的版本)下运行,则请确保为所有 DLL 指定完整路径名。在这些操作系统中,加载文件时会首先搜索当前目录。如果没有限定文件的路径,则可能会加载没有计划加载的文件。 |