我知道混合来自不同MSVC的DLL是不好的,应该避免。 在这里,我想知道他们不同行为的原因。
背景:
附带 (XXX.dll、XXX.lib 和 XXX.h( 的第三方库 我在我的应用程序中使用它隐式链接。 它们都是 x64。
- 我的应用程序是使用 MSVC 2015 构建的。
- 第三方XXX.dll显然是用MSVC 2008构建的,并且
- 不幸的是,来自 XXX 的函数调用中涉及指针.dll
- 例如
int __stdcall func1(const char * arg);
将字符串作为参数 - 例如
int __stdcall func2(char * arg);
让字符串由 DLL 填充
不同的设置:
在视窗 7 (x64( 上
它工作得很好。
在视窗 10 (x64( 上
由于读取无效的内存位置.dll我收到来自 XXX 的访问冲突异常。(即呼叫int __stdcall func1(const char * arg);
(
Exception thrown at 0x000001EF05A2BBB9 (XXX.dll) in Application.exe: 0xC0000005: Access violation reading location 0x00000000074A3A68.
(当有两个 CRT/堆并且指针传输不起作用时,这听起来很合理。
问题:
为什么它可以在Windows 7上运行?
我使用相同的MSVC2015工具链,并期望相同的行为。 还是与操作系统有关?
谢谢。
事实上,最初的问题并不真正有效。 当我查看堆栈跟踪时。该异常实际上是由 XXX.DLL 中的 (msvcr90.dll( 线程引发的。
这是更详细的问题
调试升级到 Windows 10 后导致访问冲突的第三方 DLL