@Beginner_programmer
Начинающий программист

Можно ли совместить в одном проекте программы написанные на разных языках (C++, C#) в VS2012?

Например код расчета некой задачи написан на языке C++, необходимо иллюстрировать результаты расчета в "гафическом" виде (графики, рисунки и т. д.) и хотелось бы в общем иметь графический интерфейс используя не MFC, а windows form. Можно ли создать форму, кнопочки и т. д. используя C#, а сам расчет в C++. Скажем по нажатию кнопки производится расчет написанный в C++. Как это совместить в одном проекте Visual Studio 2012?
  • Вопрос задан
  • 4667 просмотров
Пригласить эксперта
Ответы на вопрос 3
15432
@15432
Системный программист ^_^
Создаете Solution с двумя проектами, C# Windows Forms и C++ Win32 DLL.
Пишете свой код на C++, делаете dllexport функцию, принимающую, к примеру, void*, куда будут складываться данные.
В C# классе используете Dllimport, через Marshal.AllocHGlobal аллоцируете память, передаете в вызов C++ функции, она что-то там заполняет, потом достаете через Marshal.Copy и работаете с этим дальше
Ответ написан
Комментировать
@MarkusD Куратор тега C++
все время мелю чепуху :)
https://github.com/FrankStain/tex-conv
Это пример такого проекта. Многозадачный конвертер текстур.

На верхнем уровне лежит C# приложение с UI на WinForms, вся работа с пользователем выполнена именно тут.
К верхнему уровню подключается C++/CLI ядро, представляющее собой библиотеку классов. Это ядро связывает верхний уровень с нижним, который представлен потенциально несчетным набором плагинов.

Библиотека классов в C# используется как будто это рядовой модуль.

Конкретно для твоего случая я порекомендую поступить так.
  • Нижний уровень - проект статической библиотеки, в которой будет весь твой C++ код.
  • Средний уровень - C++/CLI библиотека классов, в которую и линкуется нижний уровень, свяжет нижний уровень с верхним через свои классы.
  • Высокий уровень C# приложение, использующее классы среднего уровня.
Ответ написан
Комментировать
@John_Nash
coder
можно решить задачу 3мя способами
1) c++ cli
2) P/Invoke
3) Com
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы