DLL共享的时候采用的是内存映射。想问下,内存映射的映射具体是什么,是在一进程中放置DLL的内存指针,到时候进程运行的时候直接去寻找到DLL位置进行运行,还是将DLL的代码段直接复制到进程里的地址空间?DLL在多个进程一起运行共享的时候,它的生命周期由谁控制?是操作系统还是引用的进程控制?如果是引用的进程控制,是不是第一个运行的进程最先得到DLL的控制权?因为它最先把DLL从文件载入到内存?

解决方案 »

  1.   

    《Delphi下深入Windows核心编程》 讲得很清楚 第一章
      

  2.   

    生命周期由操作系统控制,FreeLibrary只是减少引用计数。
    与exe一样,代码需要先加载到内存。建议到msdn搜索loadlibrary、loadlibraryEx
      

  3.   

    补充说明:
      dll代码加载到内存,并不是加载在进程的地址空间。进程有load到这个dll,实际上是映射到进程当中。
      若其它进程有用到,也是映射;并且引用计数+1. 其实就是一个内核对象。
      

  4.   

    楼主先要弄明白共享内存的意义,可以去找找《Windows核心编程》看看