Этот вопрос относится к предыдущему вопросу о SO
Любой вопрос с процессором 1 и Любой вопрос с процессором 2
У меня есть приложение, которое изначально было построено на Win XP с помощью Visual Studio 2005 (не смейтесь!). Это приложение вызывает нашу dll win32 С++. Компоненты С#, которые вызывают библиотеки С++, были построены с конфигурацией "Любой процессор" и успешно работали над Win XP без каких-либо проблем.
Теперь мы переходим к Win 7, и выпускная версия нашего приложения (которая была построена на Win XP с VC 2005) отлично работает. Однако с выходом из выигрыша 7 нашим пользователям мы теперь взяли opputunity для перехода на VS 2010, и я построил компоненты С# на win 7 с VC 2010, но теперь, когда я запускаю эту версию, я получаю много "неспособных загрузить abc. dll", где abc.dll - это наши компоненты win32 С++.
Я понимаю, что рекомпиляция сборки С# с конфигурацией x86 решит проблему, но я не понимаю, как сборка версии С#, созданная с помощью Win-XP/Visual studio 2005 (любая конфигурация процессора), может запускаться на Выиграть 7 без каких-либо проблем? Разумеется, эти сборки С#, построенные с помощью "Any CPU", должны иметь JIT-64-битный код при загрузке в Win 7 и вызывать BadImageFormatException или другие ошибки, поскольку они вызывают DLL файлы Win32 С++.
ОБНОВЛЕНИЕ: У меня есть дополнительная информация, которая была запрошена в комментариях ниже.
-
В окне Windows 7 я нажимаю правой кнопкой мыши на свой компьютер и просматриваю свойства. В Системной информации указано "Тип системы: 64-разрядная операционная система", подтверждающая, что это ОС Win64.
-
Открытие решения в VC2005 в Windows XP При просмотре диспетчера конфигурации для решения я могу подтвердить ВСЕ, проекты С# - это тип платформы "Любой процессор".
-
При запуске сборки релиза (которая была выполнена на VC2005/win xp) на 64-битной машине Win 7, диспетчер задач отображает имя изображения как "Test.exe * 32", это подтверждает, что это jit'd и загружается в 32-битный процесс.