Исключение HRESULT: 0x800700C1 при выполнении приложения С#, ссылающегося на собственный С++ lib с повышением
Я запускаю приложение С#, которое ссылается на проект оболочки С++\CLI, который, в свою очередь, ссылается на собственный проект на С++, зависящий от библиотеки Boost 1.47 (ссылки на файлы формы... vc100-mt-gd-1_47.lib)
Все библиотеки статически связаны и все отлично компилируется. Выполнение приложения С# приводит к исключению:
"... не является допустимым приложением Win32 (исключение из HRESULT: 0x800700C1)". утверждая, что некоторая зависимость отсутствует где-то.
Приложение С# настроено на платформу x86, а все остальные проекты - Win32, включая бинарные файлы.
EDIT: перед добавлением использования библиотеки Boost, DID работает
Как я могу отслеживать проблему?
Ответы
Ответ 1
Это известная проблема. Причина - это локальное хранилище потоков (TLS), используемое в Boost:: Thread. Чтобы исправить это, вы должны либо отключить libboost_thread-vcXXX-mt-1_XX.lib, либо заставить компоновщик связывать свою сборку С++/CLI с boost_thread-vcXXX-mt-1_XX.lib(заглушкой файла boost_thread-vcXXX-mt-1_XX.dll).
Или вы можете создать свою собственную DLL и связать ее с libboost_thread-vcXXX-mt-1_XX.lib. Затем вы можете связать свою С++ DLL с сборкой С++/CLI.
См
Ответ 2
Произошла эта неприятная ошибка на днях, пытаясь получить приложение IIS на моем 64-битном ПК Visat:
Ошибка: не является допустимым приложением Win32. (Исключение из HRESULT: 0x800700C1)
Решение:
В рамках IIS 7 нажмите "Пулы приложений" (слева) в {machine_name}).
Выберите свой пул приложений и нажмите "Дополнительные настройки" справа.
Вторая настройка в списке: Включить 32-разрядные приложения - должна быть установлена в значение True.