Чи можливо використовувати C ++ з .NET рамкою?


18

Я прочитав багато коментарів щодо програмування графічного інтерфейсу, як на C #, так і на C ++. І я помітив, що Microsoft .NET Framework є потужним для програмування GUI. То чи можливо використовувати C ++ та .NET Framework?

Я думаю, що це буде чудова комбінація, оскільки C ++ є потужною мовою, і .NET Framework є кращим для програмування GUI в Windows, як я читав. Чи можливо написати графічний інтерфейс у C # та функціональність у C ++?


7
C # також є дуже потужною мовою.
Адам Кросленд

2
@Ramhound: Це зовсім неправда, що C ++ / CLI настільки ж потужний, як C #. Код C ++ / CLI містить усі оптимізації компілятора C ++ і може виконуватись швидше, і все ще містить багато методів програмування та препроцесора, яких немає в C #.
DeadMG

2
Плюс, забрати C #, якщо він хороший на C ++, не повинно бути ніяким завданням. Я не кажу, але кажу.
Ріг

4
Зважаючи на те, що ви знаєте C ++, у вас буде вибір між навчанням C ++ / CLI або C #. Жоден фактичний C ++. Я б запропонував вивчити C #, а не намагатися працювати з C ++ / CLI; C ++ / CLI не є рідною мовою ніде, тому ви знайдете безліч книг та підтримку для C #.
Девід Торнлі

6
@ddacot ні, C ++ взагалі не призначений для розвитку ігор. Він призначений для розробки програмного забезпечення, як і всі інші мови програмування. Ігри просто трапляються як програмне забезпечення.
MattDavey

Відповіді:


21

Так, раніше він називався керованим C ++, а тепер C ++ / CLI . Ви маєте доступ до всієї .NET Framework (GUI: WinForms, GDI + тощо), як і з інших трьох керованих керованих мов, C #, F # і VB.NET.


+1 На відповідь Джессі. Якщо я не помиляюся, C ++ / CLI не підтримує багаторазове успадкування. Отже, будьте готові до деяких несподіваних особливостей. Деякі з цих особливостей випливали з обмежень CLI. Я рекомендую вам спробувати знайти різницю між C ++ / CLI та "класичним" C ++, перш ніж почати використовувати його.
Ігор Солоденко

Про це детально йдеться у першому посиланні. Таким чином, підсумок: "C ++ значно розвинувся з часом, і більшість програм, написаних мовою, є об'єктно-орієнтованою. Керована C ++ і використання класів та об'єктів, що базуються на класах, залишається поширеною, як у Visual C ++. полягає в тому, що можливості багаторазового успадкування не підтримуються. Це пов’язано з обмеженням CLR. Клас, керований під збирачем сміття CLR, не може успадкувати більше одного класу. "
Джессі К. Слікер

Гаразд. Насправді мені не добре в C ++. Я просто подумав, що можуть бути ще одні важливі відмінності, які можуть створити проблеми.
Ігор Солоденко

Востаннє, коли я писав деякі C ++, було буквально десь у минулому столітті :)
Jesse C. Slicer

1
@keykeeper, типове використання C ++ / CLI має бути тонким мостом між некерованою бібліотекою C ++ та керованим світом. Досить для такого використання. Звичайно, не має сенсу кодувати щось значне в ньому.
SK-логіка

6

Не забувайте про найбільш гнучку і просту опцію, типову для світу Unix, але, чомусь, не так часто в Windows: розділення графічного інтерфейсу та логіки на різні процеси, спілкування за допомогою будь-якої розумної форми RPC (наприклад, навіть труба повинна робота). Переважно, з простим, читабельним для людини текстовим протоколом.

Таким чином ви можете реалізувати ваш графічний інтерфейс (або різні графічні інтерфейси) з будь-якими технологіями, які вам подобаються, та створити логічні компоненти з усього, що краще відповідає потребам - C ++, сценарії та все інше.

Я не знаю жодних розумних переваг монолітного дизайнерського підходу зі світу Windows.


4

Я робив це один раз кілька років тому, ще за часів керованого C ++. Ми мали деяку ділову логіку в розумній DLL-програмі, яку ми хотіли включити до GUI-стилю майстра, написаного на C #. Для цього я створив керовану збірку C ++, щоб сидіти між керованою програмою GUI та некерованою DLL і використовував System :: Runtime :: InteropServices :: Marshal в рамках цієї збірки для перетворення значень з керованих типів (System :: Int32) в некеровані типи (int) і навпаки.

Хоча керований C ++ видається застарілим, той самий головний може застосовуватися до C ++ / CLI.


3

Не зовсім. Існує гібридна мова C ++ / CLI, але це добре лише для взаємодії (офіційна політика Microsoft). Через те, як розроблено .NET Framework, існує багато мовних семантик, які дійсно не підходять для роботи з CLR, і C ++ демонструє багато з них.


7
Я не згоден з цим твердженням. C ++ / CLI цілком підходить для багатьох реалізацій.
Рамхаунд

3
@Ramhound: Microsoft самі рекомендують його лише для взаємодії. Це їх офіційна політика.
DeadMG

2
@DeadMG Ви можете надати джерело для цього?
sq33G

1
@DeadMG, ти помилився. Існує так багато варіантів роботи .NET GUI з нативною логікою.
SK-логіка

2
@DeadMG - Якщо ви не надасте доказ того, що це офіційна політика Microsoft (я не вірю ні на хвилину), то ваш просто проходить навколо
FUD

3

На сьогодні кут C ++ / CLI був охоплений великою кількістю відповідей, але ще одним способом цього є використання PInvoke. Це дозволяє програмам C # викликати функції, що містяться в dll, записаних на C ++. Перевага PInvoke полягає в тому, що ваш dll є абсолютно агностичним щодо того, що він буде викликаний з .Net. Це означає, що ви можете зателефонувати в dll, для яких у вас немає вихідного коду, і навіть якщо ви зробили вихідний код, вам не доведеться перекомпілювати його за допомогою параметра / clr. Це означає, що ви можете використовувати цей dll з іншими програмами C ++, а також із програмами C #. Є кілька фантастичних C / C ++ бібліотек там: PInvoke дозволяє вам скористатися цими. Іноді бібліотеки Win32 надають функції, які просто недоступні в. Net: PInvoke дозволяє використовувати їх.

Однією з найскладніших частин використання PInvoke є те, як перетворити некерований підпис в керований підпис. Але є чіткий лист, який допоможе в цьому.


Але коли P / Invoking C ++ безпосередньо, будьте в курсі маніпулювання, або краще забезпечити тонку обгортку C між ними.
SK-логіка

0

Ви також можете працювати з кропом C # за допомогою COM (Component Object Model). Для мене COM було краще, ніж використання керованого C ++, оскільки Visual Studio 2010 не має інтелігенції для керованого C ++. У моєму випадку ми вже маємо велику програму C ++, але хотіли спробувати перейти від MFC до WinForms або WPF.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.