动态链接库--载入、卸载


DLL载入方式:
  应用程序能够调用一个DLL中的函数之前,必须将该DLL的文件映射到调用进程的地址空间中,可以通过两种方式:启动时隐式载入 或 运行时显示载入。
  启动时隐式载入:需要 .h、.lib、.dll;
  运行时显示载入:需要 .h、.dll;(.h只是告诉有哪些可调用符号,知道符号则可不添加)
DLL显式载入和卸载:
  通过 LoadLibrary 和 LoadLibraryEx 两个函数会在用户的系统中对DLL文件进行定位,并试图将该文件映射到调用进程的地址空间中。
  pszDLLPathName:
    参数非全路径或网络路径,那么将以标准路径进行搜索;
    参数传入全路径或网络路径,那么不在搜索其他地方而直接返回;
  通过 FreeLibrary 和 FreeLibraryAndExitThread 来显示地将DLL从进程地址空间中卸载。FreeLibrary会立刻将DLL从进程地址空间中卸载,如果先调FreeLibrary再调ExitThread,则导致调用ExitThread的代码不复存在。
DLL显示载入获取导入函数地址:
  通过GetProcAdress函数得到想要引用的符号的地址。只能传PCTSTR字符,因为编译器、链接器始终都是将符号的名称以ANSI字符串的形式保存在DLL的导出段中。
DLL载入标准搜索路径顺序:
  导入段只包含DLL的名称,不包含DLL的路径,因此加载程序必须在用户的磁盘上搜索DLL。
  加载程序搜索DLL的顺序:
    1、应用程序所在目录;
    2、Windows的系统目录;(win32下为GetSystemDirectory获得的system32目录,win64下为GetSystemWow64Directory获得的syswow64目录)
    3、16位的系统目录;(Windows目录中的System子目录)
    4、Windows目录;
    5、进程的当前目录;(GetCurrentDirectory获得目录)
    6、PATH环境变量中所列出的目录;(只是当前用户的Path环境变量)
设定DLL文件加载路径:
  如果希望从一个设定的文件夹中动态加载DLL,那么应该调用SetDllDirectory,并将程序库所在的文件夹作为参数传入。
    1、应用程序所在目录;
    2、函数SetDllDirectory参数lpPathName给定的目录;
    3、Windows的系统目录;(win32下为GetSystemDirectory获得的system32目录,win64下为GetSystemWow64Directory获得的syswow64目录)
    4、16位的系统目录;(Windows目录中的System子目录)
    5、Windows目录;
    6、PATH环境变量中所列出的目录;(只是当前用户的Path环境变量)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM