答案 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的加载和卸载。
以LoadLibrary和FreeLibrary为起点。
根据您使用的语言/工具,将为您处理许多加载库的详细信息,但如果您真的需要,通常仍然可以获得明确的控制。