Saya telah membaca banyak komentar tentang pemrograman GUI, di keduanya, C # dan C ++. Dan saya perhatikan bahwa Microsoft .NET framework kuat untuk pemrograman GUI. Jadi apakah mungkin untuk menggunakan C ++ dan .NET framework?
Saya pikir ini akan menjadi kombinasi yang hebat karena C ++ adalah bahasa yang kuat, dan .NET framework lebih disukai untuk pemrograman GUI di Windows, seperti yang saya baca. Apakah mungkin untuk menulis GUI dalam C # dan fungsionalitas dalam C ++?
Jawaban:
Ya, sebelumnya dikenal sebagai Managed C ++ dan sekarang C ++ / CLI . Anda memiliki akses ke keseluruhan .NET Framework (GUI: WinForms, GDI +, dll.) Seperti dari tiga bahasa terkelola lainnya, C #, F #, dan VB.NET.
sumber
Jangan lupa tentang opsi yang paling fleksibel dan sederhana, tipikal untuk dunia Unix tetapi, untuk beberapa alasan, tidak umum di Windows: memecah GUI dan logika menjadi proses yang berbeda, berkomunikasi melalui bentuk RPC yang wajar (misalnya, bahkan sebuah pipa harus kerja). Lebih disukai dengan protokol teks sederhana yang dapat dibaca manusia.
Dengan cara ini Anda dapat mengimplementasikan GUI Anda (atau berbagai GUI) dengan teknologi apa pun yang Anda suka, dan membangun komponen logika dari apa pun yang sesuai dengan kebutuhan dengan lebih baik - C ++, skrip, apa pun yang lainnya.
Saya tidak mengetahui adanya keuntungan wajar dari pendekatan desain monolitik dari dunia Windows.
sumber
Saya melakukan ini sekali beberapa tahun yang lalu, kembali pada hari-hari Managed C ++. Kami memiliki beberapa logika bisnis dalam DLL umanaged yang ingin kami gabungkan ke dalam GUI gaya penyihir yang ditulis dalam C #. Untuk melakukan ini, saya membuat rakitan C ++ yang Dikelola untuk duduk di antara aplikasi GUI yang dikelola dan DLL yang tidak dikelola dan menggunakan System :: Runtime :: InteropServices :: Marshal di dalam rakitan itu untuk mengonversi nilai dari jenis yang dikelola (System :: Int32) menjadi tidak terkelola jenis (int) dan sebaliknya.
Meskipun Managed C ++ tampaknya sudah tidak digunakan lagi, prinsipal yang sama mungkin berlaku untuk C ++ / CLI.
sumber
Tidak juga. Ada bahasa hibrida C ++ / CLI, tetapi itu hanya baik untuk interoperation (kebijakan resmi Microsoft). Karena cara kerangka NET dirancang, ada banyak semantik bahasa yang benar-benar tidak cocok berjalan di CLR, dan C ++ menunjukkan banyak dari mereka.
sumber
Sudut C ++ / CLI telah dicakup oleh banyak jawaban sejauh ini, tetapi cara lain untuk melakukan ini adalah dengan menggunakan PInvoke. Ini memungkinkan program C # untuk memanggil fungsi yang terdapat dalam dll yang ditulis dalam C ++. Keuntungan dari PInvoke adalah bahwa dll Anda benar-benar agnostik tentang fakta bahwa ia akan dipanggil dari .Net. Ini berarti Anda dapat memanggil dll yang Anda tidak memiliki kode sumber, dan bahkan jika Anda melakukannya Anda kode sumber Anda tidak perlu mengkompilasi ulang menggunakan opsi / clr. Ini berarti Anda dapat menggunakan dll ini dengan program C ++ lainnya, serta program C #. Ada beberapa pustaka C / C ++ yang luar biasa di luar sana: PInvoke memungkinkan Anda memanfaatkannya. Terkadang pustaka Win32 menyediakan fungsi yang tidak tersedia di .Net: PInvoke memungkinkan Anda untuk menggunakannya.
Salah satu bagian tersulit dalam menggunakan PInvoke adalah mengetahui cara mengubah tanda tangan yang tidak dikelola menjadi tanda tangan yang dikelola. Tapi ada lembar contekan untuk membantu itu.
sumber
Anda juga dapat bekerja dengan C # dill melalui COM (Component Object Model). Bagi saya, COM lebih baik daripada menggunakan Managed C ++ karena Visual Studio 2010 tidak memiliki intellisense untuk Managed C ++. Dalam kasus saya, kami sudah memiliki aplikasi C ++ besar tetapi ingin mencoba pindah dari MFC ke WinForms atau WPF.
sumber