首页 > 解决方案 > 混合来自不同 MSVC 的 DLL 时的不同行为

问题描述

我知道混合来自不同 MSVC 的 DLL 是不好的,应该避免。在这里,我想知道他们不同行为的原因。

背景:

我在我的应用程序中使用带有隐式链接的第三方库(XXX.dll、XXX.lib 和 XXX.h)。它们都是 x64 的。

不同的设置:

在 Windows 7 (x64) 上

它工作得很好。

在 Windows 10 (x64) 上

由于读取无效的内存位置,我从 XXX.dll 获得访问冲突异常。(即打电话int __stdcall func1(const char * arg);

Exception thrown at 0x000001EF05A2BBB9 (XXX.dll) in Application.exe: 0xC0000005: Access violation reading location 0x00000000074A3A68.

(当有两个 CRT/Heap 并且指针传输不起作用时,这听起来很合理。)

问题:

为什么它适用于 Windows 7?

我使用相同的 MSVC2015 工具链并且期望相同的行为。或者有什么与操作系统相关的吗?

谢谢。

标签: c++visual-studiodllwindows-10

解决方案


事实上,最初的问题并不是真的有效。当我查看堆栈跟踪时。该异常实际上是由 XXX.DLL 中的 (msvcr90.dll) 线程引发的。

这是更详细的问题

升级到 Windows 10 后调试导致访问冲突的第 3 方 DLL


推荐阅读