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?