In a static library, the lib file contains the actual object code for the functions provided by the library. In the shared version (what you referred to as statically linked dynamic library), there is just enough code to establish the dynamic linkage at runtime.
I'm not sure about "dynamically linked dynamic libraries" (loaded programmatically). Do you even link with a .lib in that case?
Edit:
A bit late in coming, but no, you don't link a .lib. Well, you link to the lib with libraryloaderex in it. But for the actual library you're using, you provide your own bindings via C function pointers and loadlibrary fills those in.
Here's a summary:
Linking ǁ Static | DLL | LoadLibrary
=========ǁ===============|======================|===================
API code ǁ In your com- | In the DLL | In the DLL
lives ǁ piled program | |
---------ǁ---------------|----------------------|-------------------
Function ǁ Direct, may | Indirect via table | Indirect via your
calls ǁ be elided | filled automatically | own function ptrs
---------ǁ---------------|----------------------|-------------------
Burden ǁ Compiler | Compiler/OS | You/OS