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的调用完成后,稍后会调用这些调用. 不幸的是,悬挂问题仍然存在. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |