C ++ / CLI из DLL расширения MFC - PullRequest
3 голосов
/ 21 октября 2008

У меня есть приложение MFC, которое использует несколько расширений MFC DLL. Я хочу, чтобы это приложение (и несколько других похожих приложений) имели доступ к некоторым частям .net Framework. Я написал библиотеку C # для выполнения нужной работы .net и надеялся, что смогу написать dll MFC, чтобы скрыть весь код C ++ / CLI из моих приложений. Приложения останутся чистыми приложениями MFC, и единственный код C ++ / CLI будет в моей новой DLL-библиотеке расширения MFX. Однако, когда я сделал это, приложения потерпели крах при доступе к новой MFC C ++ / CLI dll. Если я добавлю код C ++ / CLI в приложения, он будет работать нормально, и я смогу отладить весь путь до C #.

Кто-нибудь понимает, почему идея dll не работает?

Спасибо

Ответы [ 3 ]

1 голос
/ 04 ноября 2008

Мне кажется, я столкнулся с подобной проблемой. Моя установка была похожей - чистое приложение MFC с чистой MFC DLL, которое, в свою очередь, взаимодействовало с C ++ / CLI DLL. Все будет работать нормально, но при выходе из него произойдет сбой. Проблема усугублялась при тестировании чистой MFC DLL с использованием CppUnit.

При отладке я обнаружил, что из-за ошибки мой код C ++ выдавал исключительные ситуации при нарушениях прав доступа (объекты, на которые ссылается свисающий указатель) при выходе. Теперь среда выполнения C ++ игнорирует эти нарушения при выходе, а CLR - нет. Среда выполнения CLR создает необработанное исключение, в результате чего создается впечатление, что программа / модульный тест завершился сбоем.

Возможно, ваша проблема в другом, но она звучит очень похоже на ту, что была у меня.

1 голос
/ 22 октября 2008

Нельзя ссылаться на управляемые сборки из чистого нативного кода. Вы должны либо включить переключатель / clr на потребителе (либо для всего проекта, либо в определенных файлах), либо выполнить некоторое взаимодействие.

Один из вариантов взаимодействия, который позволит потребителю сказать, что он является чистым нативным, вызывает управляемую сборку через COM Callable Wrapper .

0 голосов
/ 22 октября 2008

Проект MFC dll ссылается на библиотеку C # и содержит один файл, скомпилированный с / clr, который обрабатывает интерфейс в моей библиотеке C #. Я действительно видел эту работу иногда во время выполнения, но никогда не был в состоянии отладить в dll MFC или в коде C #. Однако, похоже, что он вообще не стабилен и в большинстве случаев дает сбой.

...