Как правило, вы можете "использовать" C ++ dll с любой версией Visual Studio, если вы просто ссылаетесь на нее.
Однако, когда ваша dll скомпилирована, она будет нацелена на конкретную версию среды выполнения C ++, поэтому конечные пользователи вашей программы должны будут установить эту среду выполнения (распространяемый пакет Visual C ++) на свой ПК. Поэтому, если вы используете DLL, созданную VS2005, и исполняемый файл, созданный VS2010, ваш конечный пользователь должен будет установить распространяемые пакеты как 2005, так и 2010 года. То же самое обычно относится и к другим библиотекам, если вы их используете (MFC и т. Д.)
Если вы сделаете это, вам также нужно быть осторожным с распределением памяти - память, выделенная в одной версии времени выполнения, не может быть безопасно удалена другой. Так что все, что выделяет ваша dll, также должно быть освобождено dll, а все, что выделено вашим exe, не должно быть освобождено dll.
В результате большинство людей пересобирают dll с той же версией VS, в которой они собирают остальную часть своей программы, чтобы минимизировать проблемы совместимости - в конечном итоге гораздо проще встроить каждую версию VS, чем разбирать все вопросы, связанные с этим не делают.
(Подсказка: вы можете запустить VS из командной строки и заставить его построить проект / решение, так что это 5-минутная работа, чтобы написать пакетный скрипт, который автоматизирует сборку всех трех вариантов за один раз)