3

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

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

4

2 回答 2

8

LoadLibrary 增加可执行文件的引用计数,而 FreeLibrary 减少它。

当引用计数达到 0 时,可执行文件被卸载。所以你通常不必担心它。只要在您的进程中没有人调用 FreeLibrary,Dll 就会留在那里。

于 2012-05-11T09:55:09.847 回答
1

如果您阅读 MSDN: http: //msdn.microsoft.com/en-us/library/windows/desktop/ms684175%28v=vs.85%29.aspx它说明了如果 dll 还没有的行为将是什么加载以及如果 dll 已经加载会发生什么,所以你不应该担心这个开销。

如果指定的模块是一个尚未为调用进程加载的 DLL,则系统使用 DLL_PROCESS_ATTACH 值调用 DLL 的 DllMain 函数。如果 DllMain 返回 TRUE,则 LoadLibrary 返回模块的句柄。

于 2012-05-11T10:02:03.030 回答