我知道混合来自不同MSVC的DLL是不好的,应该避免。 在这里,我想知道他们行为不同的原因。
背景:
具有随附的第3方库(XXX.dll,XXX.lib和XXX.h) 我在隐式链接应用程序中使用它。 它们都是x64。
int __stdcall func1(const char * arg);
以字符串作为参数int __stdcall func2(char * arg);
获取由DLL填充的字符串不同的设置:
在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 /堆时,这听起来很合理,并且指针传输将不起作用。)
问题:
为什么它可以在Windows 7上运行?
我使用相同的MSVC2015工具链,并且预期会有相同的行为。 还是操作系统相关?
谢谢。
答案 0 :(得分:0)
确实,原始问题并非真正有效。 当我查看堆栈跟踪时。实际上,该异常是由XXX.DLL中的(msvcr90.dll)线程引发的。
这是更详细的问题
Debug 3rd party DLL causing access violation after upgrading to Windows 10