Написание управляемого кода на C # на родном C ++ - PullRequest
1 голос
/ 23 мая 2011

Я занимаюсь разработкой управляемой библиотеки (с использованием веб-служб Microsoft) и включаю ее в проект c ++.В проекте не используется опция /clr, поэтому при включении заголовочного файла моей библиотеки VS2005 выдает ошибку, в которой говорится, что я должен использовать опцию /clr.При этом у меня есть несовместимость с /EHs параметром командной строки (ошибка D8016), но я изменил с EHs на отсутствие обработки исключений, что не решает проблему и продолжает показывать мне ту же ошибку.

Любое предложение приветствуется.

Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 23 мая 2011

Если у вас есть неуправляемый код C ++ и вы хотите использовать управляемый код, у вас есть несколько вариантов:

  • Измените неуправляемый код на C ++ / CLI с помощью переключателя /clr.
  • Написать библиотеку оболочки C ++ / CLI.Он может экспортировать неуправляемые функции DLL, которые вы вызываете в неуправляемом коде.
  • Пропустить библиотеку оболочки и напрямую экспортировать неуправляемые функции DLL через эту библиотеку .
1 голос
/ 23 мая 2011

Вы не можете использовать управляемую библиотеку из неуправляемого приложения C ++. Поскольку вы добавляете параметр / clr, ваше приложение на c ++ тоже становится управляемым (только для записи :))

Вот что может вам помочь: http://msdn.microsoft.com/en-us/library/ffkc918h.aspx - ограничения опции / clr.

0 голосов
/ 23 мая 2011

Вы можете встроить моно среду и запустить домен приложений.API времени выполнения mono позволит вам создавать экземпляры классов и вызывать их членов.Это будет неуклюже, но будет работать

http://www.mono -project.com / Embedding_Mono

Обратите внимание, что Mono - это полноценная CLR, совместимая с .Net 4.0, и она можетработать с основными библиотеками Microsoft в Windows.

В Windows и Unix он может работать с библиотеками Mono Corlib / Class.Есть области, не покрытые Mono, но они, кажется, становятся редкими.Вы можете использовать инструмент MoMa, чтобы определить, использует ли ваше приложение несовместимые / неполные API.

Или вы можете просто использовать Microsoft .NET Framework, если вы все равно находитесь на Windows!

0 голосов
/ 23 мая 2011

Можно написать управляемый адаптер c ++, который будет вызывать библиотеку C #, и вызывать этот адаптер из неуправляемой программы c ++, как вы обычно вызываете обычную библиотеку c ++.Вы скомпилируете свою библиотеку адаптеров с помощью / clr и вашей основной программы на c ++ без / clr, если по какой-либо причине вы хотите оставить ее неуправляемой.

...