Подтвердить что ты не робот

Исключение HRESULT: 0x800700C1 при выполнении приложения С#, ссылающегося на собственный С++ lib с повышением

Я запускаю приложение С#, которое ссылается на проект оболочки С++\CLI, который, в свою очередь, ссылается на собственный проект на С++, зависящий от библиотеки Boost 1.47 (ссылки на файлы формы... vc100-mt-gd-1_47.lib)

Все библиотеки статически связаны и все отлично компилируется. Выполнение приложения С# приводит к исключению: "... не является допустимым приложением Win32 (исключение из HRESULT: 0x800700C1)". утверждая, что некоторая зависимость отсутствует где-то.

Приложение С# настроено на платформу x86, а все остальные проекты - Win32, включая бинарные файлы.

EDIT: перед добавлением использования библиотеки Boost, DID работает

Как я могу отслеживать проблему?

4b9b3361

Ответ 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.