I know that mixing DLLs from different MSVC is bad and should be avoided. Here I would like to know the reason of their different behavior.
Background:
Having 3rd party library shipped with (XXX.dll, XXX.lib and XXX.h) I use it in my application with implicit linking. They are all x64.
- my application is built with MSVC 2015.
- The 3rd party XXX.dll is apparently built with MSVC 2008 and
- Unfortunately there is pointer involved in function calls from XXX.dll
- e.g.
int __stdcall func1(const char * arg);
to have string as argument - e.g.
int __stdcall func2(char * arg);
to get string filled by DLL
Different Setup:
On Windows 7 (x64)
It works just fine.
On Windows 10 (x64)
I get access violation exception from XXX.dll due to reading invalid memory location. (i.e. calling int __stdcall func1(const char * arg);
)
Exception thrown at 0x000001EF05A2BBB9 (XXX.dll) in Application.exe: 0xC0000005: Access violation reading location 0x00000000074A3A68.
(it sounds reasonable when there are two CRTs/Heaps and pointer transfer will not work.)
Question:
Why it works on Windows 7?
I use the same MSVC2015 tool-chain and would expect the same behavior. Or is there something OS related?
Thanks.