托管调试助手“LoaderLock”在XXX中检测到故障。其他信息:正尝试在OS加载程序锁内执行托管代码。不要尝试在DllMain或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。

在程序中执行new一个对象A时,出现了错误信息:

托管调试助手“LoaderLock”在XXX中检测到故障。其他信息:正尝试在OS加载程序锁内执行托管代码。不要尝试在DllMain或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。


该错误在另外一个测试工程里就不会出现,只要加入到软件框架中就会出现。说明该类A应该本身没有问题,而是和软件框架中某地方有说不清道不明的耦合。

谷歌之后发现了一个很多人提到的解决方法:

1. 修改Visual Studio 中的调试异常设置或者修改注册表信息。[链接]该文章认为窗体还没有完全生成,而在这个时候就调用了别的dll,可能就抛出了这个异常。

于是按照要求修改了异常设置和注册表,一运行,居然还是老样子,毫无变化。

换个思路,既然是在窗体完全生成之前调用了new A,那么就把new的语句放到别处就OK了?

于是把new A的语句放到了窗体初始化之前,反正窗体也还没开始初始化,总该可以了。运行,发现确实这一句不报错,但是继续运行,在窗体初始化过程中有一个Waterfall的控件的new语句处又弹出了这个错误。这下找到罪魁祸首了,莫非这两个东西有冲突?

单独开一个Form工程,界面上添加一个Waterfall控件。再在Form_Load事件响应函数中添加new A的语句。运行,果然出现了问题,把两者调换位置,new A不出错误了,new Waterfall出错。

这次倒是不弹出异常的提示窗口了,而是弹出了Console窗口,显示了如下信息:


看来应该是这两个文件不能同时初始化的原因。然后其给出的方案是在系统的环境变量中添加KMP_DUPLICATE_LIB_OK量,并置为TRUE。谷歌一下libguide40.lib和libiomp5md.dll文件,发现[链接]给出了解决方法。和Console中给出的提示一致。按照要求修改了环境变量后,重新打开Visual Studio工程,运行,没有再出现任何问题。

[这里]也有类似的问题。不推荐使用设置系统环境变量的方法。但目前还不知道怎样更好的解决。或许更新或者替换Waterfall控件的版本可以解决。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值