взаимодействие между проектом C # и C ++ в одном решении - PullRequest
11 голосов
/ 20 октября 2011

У меня есть приложение Windows Forms, написанное на C ++ / cli.Я хочу дополнить это приложение новыми формами, и я хотел бы создать их на C # в отдельном проекте.

Можно ли просто добавить проект C # в решение, в котором есть проект C ++, и оба будут взаимодействовать?Под взаимодействием я имею в виду, что, скажем, нажатие кнопки на форме, написанной в проекте c #, сможет вызывать методы в проекте c ++.Возможно, по-другому, может ли объект в проекте C # ссылаться на объект в проекте c ++?если да, знаете ли вы пример кода, чтобы начать меня?

Спасибо.

Ответы [ 2 ]

6 голосов
/ 20 октября 2011

Да. Приложение C ++ / CLI сможет взаимодействовать с приложением C # одним из двух способов:

Если вы используете расширения CLI (что из вашего поста звучит как это), вы сможете написать код, используя новые ссылки на объекты:

Управляемые объекты: System::String^ myString (в C ++) совпадает с string myString в C # Управляемые ссылки: System::String% myString эквивалентно ref string myString.

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

РЕДАКТИРОВАТЬ: о, и если вам нужно выделить управляемые объекты через C ++, вам нужно будет использовать gcnew вместо new.

2 голосов
/ 20 октября 2011

Это можно сделать, скомпилировав dll с проектом C ++, затем загрузив в dll приложение C #, а затем оно сможет вызывать свои экспортированные функции. Этот метод позволяет вашему коду C ++ быть неуправляемым кодом.

Что касается поиска образца, который уже настроен, я могу найти только проект Visual Studio 2008: Microsoft All-In-One Code Framework

Для Visual Studio 2010, вот как сделать сторону C ++: Как сделать dll с C ++ Использование явного PInvoke в C ++

...