Czytałem wiele komentarzy na temat programowania GUI, zarówno w języku C #, jak i C ++. Zauważyłem, że platforma .NET firmy Microsoft jest potężna do programowania GUI. Czy można więc korzystać z frameworka C ++ i .NET?
Myślę, że będzie to świetna kombinacja, ponieważ C ++ jest potężnym językiem, a .NET jest preferowany do programowania GUI w systemie Windows, jak czytałem. Czy można napisać GUI w C # i funkcjonalność w C ++?
Odpowiedzi:
Tak, wcześniej był znany jako Managed C ++, a teraz C ++ / CLI . Masz dostęp do całości .NET Framework (GUI: WinForms, GDI + itp.), Tak jak w przypadku pozostałych trzech dołączonych zarządzanych języków, C #, F # i VB.NET.
źródło
Nie zapomnij o najbardziej elastycznej i najprostszej opcji, typowej dla świata uniksowego, ale z jakiegoś powodu nie tak powszechnej w systemie Windows: dzielenie GUI i logiki na różne procesy, komunikowanie się za pomocą dowolnej rozsądnej formy RPC (np. Nawet potok powinien praca). Najlepiej z prostym, czytelnym dla człowieka protokołem tekstowym.
W ten sposób możesz zaimplementować GUI (lub różne GUI) z dowolnymi technologiami, które ci się podobają, i zbudować elementy logiczne z tego, co bardziej odpowiada potrzebom - C ++, skrypty, cokolwiek innego.
Nie znam żadnych rozsądnych zalet monolitycznego podejścia do projektowania ze świata Windows.
źródło
Zrobiłem to raz kilka lat temu, w czasach Managed C ++. Mieliśmy trochę logiki biznesowej w zarządzanej bibliotece DLL, którą chcieliśmy włączyć do GUI w stylu kreatora napisanego w C #. Aby to zrobić, utworzyłem zestaw Managed C ++, który znajduje się między zarządzaną aplikacją GUI a niezarządzaną biblioteką DLL, i użyłem System :: Runtime :: InteropServices :: Marshal w tym zestawie do konwersji wartości z typów zarządzanych (System :: Int32) na niezarządzane typy (int) i odwrotnie.
Chociaż Managed C ++ wydaje się być przestarzały, ta sama zasada może mieć zastosowanie do C ++ / CLI.
źródło
Nie całkiem. Istnieje język hybrydowy C ++ / CLI, ale nadaje się tylko do współpracy (oficjalna polityka Microsoftu). Ze względu na sposób zaprojektowania frameworku .NET istnieje wiele semantyki języka, która naprawdę nie pasuje do uruchamiania w CLR, a C ++ wykazuje wiele z nich.
źródło
Do tej pory kąt C ++ / CLI był objęty wieloma odpowiedziami, ale innym sposobem jest użycie PInvoke. Pozwala to programom C # wywoływać funkcje zawarte w bibliotekach DLL napisanych w C ++. Zaletą PInvoke jest to, że twoja biblioteka DLL jest całkowicie agnostyczna wobec faktu, że zostanie wywołana z .Net. Oznacza to, że możesz wywoływać biblioteki DLL, dla których nie masz kodu źródłowego, a nawet jeśli zrobiłeś kod źródłowy, nie musiałbyś go ponownie kompilować za pomocą opcji / clr. Oznacza to, że możesz używać tej biblioteki DLL z innymi programami C ++, a także programami C #. Istnieje kilka fantastycznych bibliotek C / C ++: PInvoke pozwala ci z nich skorzystać. Czasami biblioteki Win32 zapewniają funkcje, które po prostu nie są dostępne w .Net: PInvoke pozwala z nich korzystać.
Jedną z najtrudniejszych części korzystania z PInvoke jest umiejętność konwersji niezarządzanego podpisu na podpis zarządzany. Ale jest do tego cheatheet .
źródło
Możesz również pracować z koperkiem C # za pomocą COM (Component Object Model). Dla mnie COM był lepszy niż używanie Managed C ++, ponieważ Visual Studio 2010 nie ma inteligencji dla Managed C ++. W moim przypadku mamy już dużą aplikację C ++, ale chcieliśmy spróbować przejść z MFC do WinForms lub WPF.
źródło