大佬教程收集整理的这篇文章主要介绍了托管c dll的加载程序锁定错误,静态链接到本机c lib,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
让我感到困惑的是,在将本机代码放入dll时,一切正常,但在从库中静态链接时却没有.我知道这篇文章与this question类似,但我的dll中没有DllMain,我没有从DllMain运行MSIL代码的风险.另外,遵循在单个文件上设置/ clr的建议没有帮助.
使用/ NOENTRY编译dll会修复锁定问题,但会导致应用程序因类型初始值设定项而断开< Module>抛出异常异常,显然只是推荐使用.NET 2003.
我怀疑静态成员的初始化可能是一个可能的罪魁祸首,但为什么在我的静态库中编译成MSIL会超出我的范围.
解决了这个问题,但很少有事情不清楚,我很好奇:
我注意到,当事情停止工作时,静态链接库中的头文件中添加了两个静态变量,如下所示:
// The whole header is forced to compile as native #pragma managed(push,off) .... static const std::locale commaSeparator(std::locale::classic(),new decimalSeparator<char>(','));; .... #pragma managed(pop)
将初始化移动到.cpp文件(并将static更改为extern)可修复加载程序锁定.任何人都可以指出为什么初始化程序会被编译为MSIL?
在修复之前,如果我只是#included来自托管dll的头文件,那么一切正常.但是,如果我包含标题AND也链接到lib,事情就不起作用了.由于lib也在内部使用头,我最终得到了静态变量的两个实例吗?在任何情况下,为什么投诉运行MSIL代码?
虽然事情现在有效,但任何见解都会受到欢迎.
以上是大佬教程为你收集整理的托管c dll的加载程序锁定错误,静态链接到本机c lib全部内容,希望文章能够帮你解决托管c dll的加载程序锁定错误,静态链接到本机c lib所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。