使用LoadLibrary加载DLL

时间:2012-05-11 09:51:22

标签: c++ visual-c++ dll loadlibrary dynamic-loading

如果我加载LoadLibrary的DLL,该DLL是否保证保持加载状态?如果没有,我该如何防止重新加载。

实际情况:我有一个调度程序,根据一些消息,需要加载几个dll中的一个并从中执行一些功能。我无法在编译时链接它们,因此我使用LoadLibrary。因为可能会有很多电话,所以我不想每次都拨打LoadLibrary,因为事实证明这是一个瓶颈。所以我想每个DLL只调用一次,调用GetProcAddress每个dll只能获取一次该函数,并将其缓存到某个地方。但它安全吗?我保证在任何后续通话中调用该功能都可以吗?如果没有,我该如何保证?

2 个答案:

答案 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   模块的句柄。