 MS LINKs 5.12+ allow use of delayed DLL loading. It means: Load DLL when any
API from this DLL is called. It saves memory in large processes: when APIs from
DLL aren't called, DLL is not loaded and the working set size is not changed.
 The best thing is that programmer need not to do anything special to add delay
load feature. The only 2 things he/she has to do are:
 1) to specify /DELAYLOAD:Module
 2) to provide __delayLoadHelper@8 =>
    __delayLoadHelper PROC addrlist1, addrlist2
      ;your code (LoadLibrary+GetProcAddress) here
    __delayLoadHelper ENDP
    PUBLIC __delayLoadHelper
    This helper returns (in EAX) API address and changes _imp__API in import
    from API_Call_First_Time to API.
You can write your own helper or you can use helper from DELAYIMP.lib library.
You can specify /DELAY:{NOBIND|UNLOAD} on LINK command line. 

Stubs has this structure:
   API_Call_First_Time:
    PUSH  ECX
    PUSH  EDX
    PUSH  OFFSET _imp__API      ; now _imp__API == API_Call_First_Time
    JMP   Call_Helper_With_MyDll
    JMP   _imp__API

  Call_Helper_With_MyDll:
    PUSH  Delay_Load_Directory_For_MyDll
    CALL  __delayLoadHelper   ;stdcall
    POP   EDX
    POP   ECX
    JMP   EAX                   ; now _imp__API == address of API
