AFAIK, искажение имен в Visual C ++ стабильно от выпуска к выпуску.
Основная проблема заключается в том, что код, скомпилированный с одной версией, должен быть связан с CRTL для этой версии, и смешивание кода из нескольких версий в одной и той же DLL или EXE не будет работать, поскольку тогда оба объектных кода ожидают разные процедуры RTL.
С другой стороны, если вы связываете отдельные библиотеки DLL, содержащие разные библиотеки, это должно работать. В конце концов, в этом весь смысл DLL.
В этом сценарии я бы рекомендовал использовать только extern "C"
API и (если это 32-битный код) явно указывать соглашение о вызовах (__stdcall__
или WINAPI
или _cdecl
...)
Кроме того, есть тонкое замечание, когда у вашего приложения есть несколько копий CRTL: у вас есть несколько куч! и если объект размещается в одной куче и освобождается в другой куче, куча немедленно повреждается, и вы вылетаете.
В общем, если вы можете заставить их перекомпилироваться с вашим компилятором, это самая простая вещь.