#c# #c #exception-handling #clr #microsoft-runtime-library
#c# #c #обработка исключений #clr #microsoft-runtime-library
Вопрос:
Я пытаюсь создать виджет C # для запуска вместе с архитектурой службы C . Я использую существующую службу интерфейса C , которая публикует / подписывает данные, и подключаю ее к обратным вызовам визуализации C #.
Итак, у меня есть решение с проектом C # и проектом интерфейса данных C . Проект интерфейса C компилируется с /clr, /MDd и / EHa, но это зависит от множества библиотек, которые компилируются с /EHsc и MTd . Компоновщику не нравится, когда эти флаги не совпадают.
Если я изменю интерфейс данных, чтобы использовать /MTd и / EHsc, подобные его зависимостям, он сообщает мне, что это несовместимо с / clr . Я предполагаю, что мне нужно скомпилировать интерфейс данных C с помощью / clr, чтобы он мог взаимодействовать с визуализацией C #, верно? Но я не владею библиотеками зависимостей проекта C , поэтому я не могу изменить способ их компиляции.
Итак, мой вопрос в том, можете ли вы заставить приложение C # взаимодействовать с DLL на C , если эта DLL имеет зависимости, которые были скомпилированы с параметрами / MTd и EHsc?
Комментарии:
1. Вам нужно будет перестроить эти библиотеки. Или изолировать их в отдельной DLL, хотя это обычно не заканчивается хорошо. Наличие более одной копии CRT вызывает много проблем, если интерфейс библиотеки не является чистым. Есть кто-то, кто может решить вашу проблему менее чем за 15 минут, вы его здесь не найдете.
2. Вместо создания управляемой оболочки вы можете попробовать использовать неуправляемую оболочку и вызвать ее с помощью PInvoke (или, что еще лучше, просто вызвать службу c с помощью PInvoke, если сможете)
3. Спасибо Гусман, я попытаюсь запустить PInvoke, и если это не сработает, я узнаю, как перекомпилировать зависимости, Ганс!