Delphi DLL是否预定用于加载程序锁?

前端之家收集整理的这篇文章主要介绍了Delphi DLL是否预定用于加载程序锁?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有一个DLL,由主(桌面)应用程序通过 Windows.LoadLibrary动态加载.那是因为有很多类似的DLL,并且只需要在运行时加载很少的单个DLL.因此静态链接不是一种选择.

问题是,在加载其中一个DLL时,主应用程序每隔一段时间就会挂起.请注意,问题很可能发生在每一个问题上.可能是因为他们有很多共同的代码库.

问题似乎是装载机锁(see this SO answer on what it is).我发现了一个公共代码,它在启动时在库单元的开始…结束部分(即project.dpr)中使用,其中使用了GetModuleHandle和GetProcAddress.

我发现,这是一个完全没有DLL的东西,因为DLL的项目文件的开始…结束部分实际上是库的DllMain函数,并且调用这些函数可能导致死锁(命名加载器锁).我在Microsoft Best Practice Guide年读过这篇文章.

所以我重建了我的代码,当Windows.LoadLibrary的调用完成后,稍后会调用这些调用.

不幸的是,悬挂问题仍然存在. 原文链接:https://www.f2er.com/delphi/239252.html

猜你在找的Delphi相关文章