C ++ не имеет стандартизированного двоичного интерфейса. Компилятор "искажает" каждое имя символа (то есть каждую функцию или статические данные), чтобы включить информацию о пространствах имен и сигнатуре, чтобы пространства имен, перегрузка аргументов и т. Д. может работать. Каждый компилятор может решить, как это сделать. В разных версиях компилятора MSVS искажение имен выполняется по-разному, поэтому в целом вы не можете связать библиотеку C ++, скомпилированную с 2005 года, и библиотеку, скомпилированную с 2008: это включает в себя загрузку библиотеки DLL 2008 из исполняемого файла 2005 (например). Это можно сделать, если интерфейс между библиотеками - C, если соответствующие функции помечены extern "C"
для предотвращения искажения имени. И на практике различия не всегда так велики: например, у меня никогда не возникало проблем с использованием VS2005 SP1 для компиляции библиотеки для 3ds Max 9, которая предположительно требует VS2005 без пакета обновления.
Microsoft пытается исправить эту несовместимость, поэтому в VS2010 они представили опцию, поэтому VS2010 может создавать двоичные файлы, совместимые с программами VS2005 или VS2008 (возможно, некоторые более ранние версии тоже, я забыл). Если вам нужно создать плагин для работы с несколькими версиями 3ds Max, и вы не обнаружите никаких ошибок VS2010, это, вероятно, хороший вариант. Кроме того, у компилятора Intel C ++ есть режим, в котором он создает двоичные файлы, совместимые с версией MSVS по вашему выбору, что может быть лучшим вариантом для вас, если он используется для хобби или вы можете позволить себе немного дорогой ценник. (Они достигают этого, копируя способ, которым MSVS использует искажение имен.)