我刚刚看了msdn上面有关delay-load dll的相关东东,对这个机制有点了解,但还不敢肯定对不对,所以写下我的理解,还请各位指正:
delay-load dll 是一种让程序在第一次呼叫dll函数的时候才加载该dll的机制,可以通过设定linker的参数来实现,具体的实现方法是需要特定的helper function 来帮助完成dll的加载过程,而这些helper function 可以自己写,也可以用m$提供的lib;pe 文件data directory 中的delay import directory项是给那些helper function 用的(用来储存delay-load 的dll的相关信息:dll 名称,dll handle ,函数地址....)....
因此:(下面是我自己的理解,也是最不肯定的地方)
在windows 加载含有delay-loaded dll的exe时,是不会理会这些dll的,windows loader 只是加载完import table 里面的所有dll,更新所有IAT,就转入exe文件的执行了。关于delay-load dll的一切,都将在exe中被处理.....实际情况是不是这样呢? 多谢指教

解决方案 »

  1.   

    在第一次需要使用该Dll的时候才加载
    如果没有使用过  就不会加载了
      

  2.   

    多谢上面的回复,但我更关心的是windows loader怎么处理delay-load dll,是不是他肯定不管加载delay-load dll的事呢???
      

  3.   

    是windows管理的吧 加载Dll是Window进行的 不是程序自己加载
      

  4.   

    看include目录里的delayhlp.cpp文件的__delayLoadHelper等函数就知道了
      

  5.   

    Jeffrey Richter和Matt Pietrek在MSJ上分别有篇文章讲这个:)
    http://www.microsoft.com/msj/1298/win32/win321298.aspx
    http://www.microsoft.com/msj/1298/hood/hood1298.aspx
      

  6.   

    第一个一时打不开,
    第二个看了,很有帮助,让我确认了我的理解是正确的。现在去试验一下~~可能会发现更多问题~~huanyun(无妻徒刑):
    是windows管理的吧 加载Dll是Window进行的 不是程序自己加载确实不是,那篇文章里面有解释。而且仔细想一下的话,如果dll是在运行时被加载,他肯定就和windows loader 没关系了,windows loader 只管善前工作嘛~~
    多谢多谢~~
      

  7.   

    相当于Windows的Helper Funtion帮你做了显式LoadLibrary和GetProcAddress的动作,其他机制相同。