Я прочитал много комментариев о программировании GUI, как на C #, так и на C ++. И я заметил, что платформа Microsoft .NET является мощной для программирования GUI. Так можно ли использовать C ++ и .NET Framework?
Я думаю, что это будет отличная комбинация, поскольку C ++ является мощным языком, а .NET, как я читал, предпочтительнее для программирования GUI в Windows. Можно ли написать графический интерфейс на C # и функциональность на C ++?
Ответы:
Да, раньше он назывался Managed C ++, а теперь C ++ / CLI . У вас есть доступ ко всей .NET Framework (GUI: WinForms, GDI + и т. Д.), Как и у других трех связанных управляемых языков, C #, F # и VB.NET.
источник
Не забывайте о наиболее гибком и простом варианте, типичном для Unix-мира, но по какой-то причине не столь распространенном в Windows: разделение графического интерфейса пользователя и логики на разные процессы, обмен данными через любую разумную форму RPC (например, даже канал должен Работа). Желательно с простым, читаемым человеком текстовым протоколом.
Таким образом, вы можете реализовать свой GUI (или различные GUI) с любыми технологиями, которые вам нравятся, и создавать логические компоненты из того, что вам больше подходит - C ++, скрипты и все остальное.
Я не знаю каких-либо разумных преимуществ монолитного подхода к проектированию из мира Windows.
источник
Я делал это однажды несколько лет назад, во времена Managed C ++. У нас была некоторая бизнес-логика в неуправляемой DLL, которую мы хотели включить в графический интерфейс в стиле мастера, написанный на C #. Для этого я создал сборку Managed C ++, расположенную между управляемым приложением GUI и неуправляемой DLL, и использовал System :: Runtime :: InteropServices :: Marshal в этой сборке для преобразования значений из управляемых типов (System :: Int32) в неуправляемые типы (int) и наоборот.
Хотя Managed C ++ выглядит устаревшим, тот же принцип может применяться к C ++ / CLI.
источник
На самом деле, нет. Существует гибридный язык C ++ / CLI, но он хорош только для взаимодействия (официальная политика Microsoft). Из-за способа разработки .NET Framework существует много языковых семантик, которые действительно не подходят для работы на CLR, и C ++ демонстрирует многие из них.
источник
До сих пор угол C ++ / CLI охватывался множеством ответов, но другой способ сделать это - использовать PInvoke. Это позволяет программам на C # вызывать функции, содержащиеся в dll, написанных на C ++. Преимущество PInvoke состоит в том, что ваша dll полностью независима от того, что она будет вызываться из .Net. Это означает, что вы можете вызывать библиотеки DLL, для которых у вас нет исходного кода, и даже если вы сделали исходный код, вам не пришлось бы перекомпилировать его с помощью параметра / clr. Это означает, что вы можете использовать эту dll с другими программами на C ++, а также с программами на C #. Есть несколько фантастических библиотек C / C ++: PInvoke позволяет вам воспользоваться ими. Иногда библиотеки Win32 предоставляют функции, которые просто недоступны в .Net: PInvoke позволяет вам их использовать.
Одна из самых сложных частей использования PInvoke - это умение преобразовывать неуправляемую подпись в управляемую подпись. Но есть шпаргалка , чтобы помочь с этим.
источник
Вы также можете работать с укропом C # через COM (объектная модель компонентов). Для меня COM лучше, чем использовать Managed C ++, поскольку Visual Studio 2010 не имеет смысла для Managed C ++. В моем случае у нас уже есть большое приложение на C ++, но мы хотели попробовать перейти от MFC к WinForms или WPF.
источник