-
Notifications
You must be signed in to change notification settings - Fork 207
_except_handler4_common在xp上的msvcrt.dll找不到 #9
Comments
这个我应该处理过了,话说是不是XP mode宏没有被定义,要不你截图下宏设置? |
vcltltest.zip |
确认此问题,原来 VC 2015 不会设置 _ATL_XP_TARGETING 宏……你暂时可以手动添加。 |
这是2015 BUG,不添加 _ATL_XP_TARGETING 将导致ATL不兼容 XP,建议你还是手动添加下吧。 |
测试工程里面是有添加的 |
确认……是VC-LTL 的 ltl140xp.lib 有问题……我重新编译下 |
我也已经凌乱了,用 __NO_LTL_LIB 参数时,正常,但是 _except_handler4_common是在maincrt函数里面被引用的 |
主要是 我自己新建个工程就很正常,但是你的这个工程就会不正常 这个才是我纠结的地方。 |
目前你暂时手动避免下吧 在 stdafx.cpp添加 |
2017下面如果toolset选择xp的话。sdk会被自动切换到7.0。没法选择10.0.15063.0。这个是否有影响?机子上也装了win7sdk。如果不选择xp则会弹不是有效的win32程序 |
这个是吗,没有影响的 XP切换过去也没事。 另外 选择XP其实就是定义 _ATL_XP_TARGETING 宏 再加 连接器 的 系统设置 所需的最低版本 调整为5.01。 所以 你手动完成上述操作 就算你用 15063 XP也不会弹窗的 |
我终于对比出差异了。在 stdatx.h里面 添加 #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的 #include <atlbase.h> 就不会 有问题了。 我他么真的醉了 |
试了下加上__NO_LTL_LIB和包含_msvcrt.cpp就报 工程里面不用到atl的也要加上这些头文件? |
最后确认 添加个 #include <atlbase.h> 就没事了……估计是编译器优化在作怪 |
我这边测试加上还是会出现 |
'PF_FASTFAIL_AVAILABLE #define PF_FASTFAIL_AVAILABLE 23 |
奇怪 msvcrt.cpp不是加了 #include <winnt.h> |
添加 #include <atlbase.h> 后 VS 2017就正常了,但是 VS 2015确实还是不正常,导入表会引用。 |
不过我明白怎么解决了,只能写个汇编代码,去替换了。等我好消息 |
刚刚试了下。在2015下,不通过toolset设置xp。直接指定最低5.01。定义__NO_LTL_LIB和包含_msvcrt.cpp就正常了。怀疑toolset选了xp后。sdk虽然显示是win10。实际用的是低版本。导致那两个宏找不到。 |
好吧……可能是 7.1 SDK里面的Winnt.h没有那二个 宏。另外 我已经彻底醉了…… 我写个汇编代码,显试替换__imp___except_handler4_common。尼玛还会被引入。而且我也有很多工程是用 VS 2015的,就是代码更多一点,也没有发现这问题。我猜测是 某些情况会触发编译器 什么 BUG。 |
尼玛…… 应该就是引用顺序 BUG。直接用 连接器的附加依赖项 就不会有问题 |
已经修复,使用属性表 ltlvcrtWinXp.props 就可以解决此问题。谢谢反馈~ |
vs2015。toolset选择xp。在win7运行正常。xp弹这个错误。
The text was updated successfully, but these errors were encountered: