本文指的DelayLoad机制并不是指编译器的链接参数。而是实现Dll加载的一种方式。
引用Dll分为显示引用和隐式引用。如果是显示引用,则会加载EXE的时候加载Dll。其内部机制是,在EXE中会有一个IAT表,记录引用到的函数地址。当程序加载运行,加载器会根据imports表加载程序需要的dll。另一种加载dll的方法是通过LoadLibrary和GetProcAddress来得到函数地址。这种方式是只有运行到这段代码时,才会加载dll。在这个基础上,我们有了Delayload。
DelayLoad对需要引用的方法加入了一个存根,在这个方法存根中,通过LoadLibrary和GetProcAddress来获取函数的真正地址。这就是DelayDoad机制。通过封装,DelayLoad机制可以不破坏正常的程序编写。但通过加入方法存根,达到了加快启动速度的目的。