加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:07:57 所属栏目:大数据 来源:网络整理
导读:有一个DLL,由主(桌面)应用程序通过 Windows.LoadLibrary动态加载.那是因为有很多类似的DLL,并且只需要在运行时加载很少的单个DLL.因此静态链接不是一种选择. 问题是,在加载其中一个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的调用完成后,稍后会调用这些调用.

不幸的是,悬挂问题仍然存在.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读