C++ 使用LoadLibrary加载dll

C++ 使用LoadLibrary加载dll,c++,visual-c++,dll,loadlibrary,dynamic-loading,C++,Visual C++,Dll,Loadlibrary,Dynamic Loading,如果我使用LoadLibrary加载DLL,是否保证该DLL保持加载状态?如果没有,如何防止重新加载 实际情况:我有一个调度器,它根据一些消息,需要加载几个dll中的一个并从中执行一些函数。我不能在编译时链接它们,所以我使用LoadLibrary。因为可能会有很多调用,我不希望每次都调用LoadLibrary,因为这是一个瓶颈。所以我想每个DLL只调用它一次,调用GetProcAddress也只获取每个DLL的函数一次,并将其缓存到某个地方。但它安全吗?我是否保证在任何后续调用中调用该函数都可以

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


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

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

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

如果您阅读MSDN:它说明了如果Dll尚未加载,会发生什么行为,如果Dll已加载,会发生什么情况,因此您不必担心此开销

如果指定的模块是尚未加载的DLL,则 调用进程时,系统使用 DLL\u进程\u附加值。如果DllMain返回TRUE,则LoadLibrary返回 模块的句柄


您是否考虑过使用延迟加载的DLL?