È possibile usare C ++ con .NET framework?

15

Ho letto molti commenti sulla programmazione della GUI, in entrambi, C # e C ++. E ho notato che il framework .NET di Microsoft è potente per la programmazione della GUI. Quindi è possibile utilizzare C ++ e .NET framework?

Penso che sarà una grande combinazione dal momento che C ++ è un linguaggio potente e .NET framework è preferito per la programmazione GUI su Windows, come ho letto. È possibile scrivere la GUI in C # e la funzionalità in C ++?

    
posta ddacot 14.02.2012 - 19:26
fonte

6 risposte

17

Sì, in passato era noto come Managed C ++ e ora C ++ / CLI . Puoi accedere all'intero framework di .NET Framework (GUI: WinForms, GDI +, ecc.) Come faresti dagli altri tre linguaggi gestiti in bundle, C #, F # e VB.NET.

    
risposta data 14.02.2012 - 20:30
fonte
5

Non dimenticare l'opzione più flessibile e semplice, tipica del mondo Unix ma, per qualche ragione, non quella comune in Windows: dividere la GUI e la logica in processi diversi, comunicando tramite qualsiasi forma ragionevole di RPC (ad esempio, anche una pipa dovrebbe funzionare). Preferibilmente con un semplice protocollo di testo leggibile.

In questo modo puoi implementare la tua GUI (o varie GUI) con tutte le tecnologie che ti piacciono e costruire componenti logici da qualsiasi cosa si adatti meglio alle esigenze - C ++, script, qualsiasi altra cosa.

Non sono a conoscenza di alcun vantaggi ragionevoli di un approccio di progettazione monolitico dal mondo Windows.

    
risposta data 15.02.2012 - 10:29
fonte
4

L'ho fatto una volta alcuni anni fa, ai tempi di Managed C ++. Avevamo una logica aziendale in una DLL umanizzata che volevamo incorporare in una GUI in stile wizard scritta in C #. Per fare questo, ho creato un assembly gestito C ++ per sedermi tra l'app GUI gestita e la DLL non gestita e ho utilizzato System :: Runtime :: InteropServices :: Marshal all'interno di quell'assembly per convertire i valori dai tipi gestiti (System :: Int32) a non gestiti types (int) e viceversa.

Mentre Managed C ++ sembra essere deprecato, lo stesso principio potrebbe applicarsi a C ++ / CLI.

    
risposta data 14.02.2012 - 21:42
fonte
3

Non proprio. Esiste un linguaggio ibrido C ++ / CLI, ma è valido solo per l'interoperabilità (la politica ufficiale di Microsoft). A causa del modo in cui il framework .NET è progettato, ci sono molte semantiche linguistiche che non si adattano davvero all'esecuzione su CLR, e C ++ ne mostra molte.

    
risposta data 14.02.2012 - 19:28
fonte
3

L'angolo C ++ / CLI è stato coperto da molte risposte finora, ma un altro modo per farlo è usare PInvoke. Ciò consente ai programmi C # di chiamare le funzioni contenute nelle DLL che sono state scritte in C ++. Il vantaggio di PInvoke è che la tua DLL è totalmente agnostica sul fatto che verrà chiamata da .Net. Ciò significa che puoi chiamare dll per cui non hai codice sorgente e anche se hai fatto il codice sorgente non dovresti ricompilarlo usando l'opzione / clr. Questo significa che puoi usare questa DLL con altri programmi C ++, così come con i programmi C #. Esistono alcune fantastiche librerie C / C ++: PInvoke ti consente di sfruttarle. Talvolta le librerie Win32 forniscono funzioni che non sono disponibili in .Net: PInvoke ti permette di usarle.

Una delle parti più complicate dell'uso di PInvoke è sapere come convertire la firma non gestita in una firma gestita. Ma c'è un cheatsheet per aiutarti.

    
risposta data 15.02.2012 - 10:00
fonte
0

Puoi anche lavorare con un C # dill tramite COM (Component Object Model). Per me COM era meglio di usare Managed C ++ dal momento che Visual Studio 2010 non ha intellisense per Managed C ++. Nel mio caso abbiamo già un'applicazione C ++ di grandi dimensioni ma volevamo provare a passare da MFC a WinForms o WPF.

    
risposta data 09.07.2018 - 17:24
fonte

Leggi altre domande sui tag