关于DLL文件的一些基本问题

时间:2010-09-22 05:09:00

标签: windows dll

  1. Windows操作系统何时将DLL加载到内存中?
  2. 当应用程序启动时或应用程序首次调用DLL中的某个过程时,是否会发生操作?
  3. 加载DLL后可以卸载它吗?

3 个答案:

答案 0 :(得分:3)

  

Windows操作系统何时使用   将DLL加载到内存中?

如果您通过.lib文件隐式地将EXE链接到DLL,就像通常对大多数Windows apis(如user32.dll和kernel32.dll)所做的那样,那么defautl行为是为了在DLL加载时加载该过程在您调用WinMain / main函数之前开始。请参阅下面的延迟加载...

如果一个DLL依赖于另一个DLL,它将首先加载它们的依赖项,如果它们尚未加载。

如果您通过DLL(LoadLibrary,CoCreateInstance等)明确加载代码,那么在进行这些调用时它将被加载

  

当操作发生时   申请开始或何时开始   应用程序首先调用其中一个   DLL中的程序?

你可以两种方式。默认情况下,DLL在应用启动时加载。如果您使用/DELAYLOAD linker flag,DLL可能会推迟加载直到实际需要。这是“尽力而为” - 如果与全局变量存在奇怪的导出依赖关系,则可能无效。

  

一旦加载DLL就可以卸载它吗?

对于已链接的隐式DLL依赖项,简短回答是“否”。 FreeLibrary和CoFreeUnusedLibrary可用于LoadLibrary / CoCreateInstance调用。

答案 1 :(得分:0)

我会假设我们正在谈论。它确保在您需要代码之前发生。但是你可以使用后期绑定在其他时间执行此操作。请参阅此页面link text

答案 2 :(得分:0)

在Windows API中,您可以显式控制.dll的加载和卸载。

LoadLibraryFreeLibrary为起点。

根据您使用的语言/工具,将为您处理许多加载库的详细信息,但如果您真的需要,通常仍然可以获得明确的控制。