У меня есть неуправляемый проект VC ++, который я могу построить для целей как x86, так и x64. Он используется программой .NET, скомпилированной для любого процессора. Это на VS2010, но у меня была та же проблема, когда решение было построено с VS2008 и vcbuild.
Вот команда build в моем скрипте сборки:
msbuild .\Project.vcxproj /t:Build /p:PlatformToolset=v100 /p:Configuration=Release /p:Platform=%platform%
Если сборка на компьютере с архитектурой x86, с% платформой% = Win32, все собирается и работает нормально
Если сборка на компьютере x64, с% platform% = x64, все собирается и работает нормально.
Однако, если я собираюсь на x64-машине, с% platform% = Win32, он собирается успешно, без ошибок. Но когда я копирую эти предположительно x86-файлы на компьютер x86, они вызывают следующую ошибку:
System.Runtime.InteropServices.SEHException was caught
Message=External component has thrown an exception.
Отследив эту ошибку до DLL C ++, она не удалась в этой строке:
if ( FAILED( g_Connection.CreateInstance( _T("ADODB.Connection") ) ) )
ThrowException(_T("Cannot create connection."));
Я просмотрел файл .vcxproj в поисках проблем, но все выглядит правильно. Там нет импортированных файлов свойств или пользовательских задач сборки или чего-то подобного.
Это вызывает проблемы, потому что мы пытаемся использовать один сервер сборки x64 для создания сборок для обеих платформ. Наш текущий обходной путь включает в себя предварительную сборку C ++ dll на двух разных машинах.