如果我加载LoadLibrary
的DLL,该DLL是否保证保持加载状态?如果没有,我该如何防止重新加载。
实际情况:我有一个调度程序,根据一些消息,需要加载几个dll中的一个并从中执行一些功能。我无法在编译时链接它们,因此我使用LoadLibrary
。因为可能会有很多电话,所以我不想每次都拨打LoadLibrary
,因为事实证明这是一个瓶颈。所以我想每个DLL只调用一次,调用GetProcAddress
每个dll只能获取一次该函数,并将其缓存到某个地方。但它安全吗?我保证在任何后续通话中调用该功能都可以吗?如果没有,我该如何保证?
答案 0 :(得分:8)
LoadLibrary增加了可执行文件的引用计数,FreeLibrary减少了它。
当引用计数达到0时,将卸载可执行文件。所以你通常不必担心它。只要没有人在你的过程中调用FreeLibrary,Dll就会留在那里。
答案 1 :(得分:1)
如果您阅读MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/ms684175%28v=vs.85%29.aspx,它会说明如果dll尚未加载会发生什么行为,如果已加载dll会发生什么情况,因此您不必担心这种开销。
如果指定的模块是尚未加载的DLL 调用进程,系统调用DLL的DllMain函数 DLL_PROCESS_ATTACH值。如果DllMain返回TRUE,则返回LoadLibrary 模块的句柄。