исключение HRESULT: 0x800700C1 при выполнении приложения c #, ссылающегося на собственную c ++ lib с boost - PullRequest
12 голосов
/ 11 ноября 2011

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 05 мая 2014

Это известная проблема. Причина в том, что локальное хранилище потоков (TLS) используется в Boost :: Thread. Чтобы исправить это, вы должны либо отключить libboost_thread-vcXXX-mt-1_XX.lib и заставить компоновщик связать вашу сборку C ++ / CLI с boost_thread-vcXXX-mt-1_XX.lib (заглушкой boost_thread-vcXXX-mt-1_XX.dll) .

Или вы можете создать свою собственную DLL и связать ее с libboost_thread-vcXXX-mt-1_XX.lib. Затем вы можете связать свою C ++ DLL с C ++ / CLI сборкой.

См

0 голосов
/ 04 июля 2014

Однажды натолкнулся на эту неприятную ошибку, пытаясь запустить приложение IIS на моем 64-битном ПК Visat:

Ошибка: не является допустимым приложением Win32. (Исключение из HRESULT: 0x800700C1)

Решение:

В IIS 7 щелкните Пулы приложений (слева под {machine_name}) Выберите пул приложений и нажмите «Дополнительные параметры» справа. Второй параметр в списке: Включить 32-разрядные приложения - для него должно быть установлено значение True.

...