2012-07-03 12 views
5

pierwsze, niektóre tła:Szukasz cross-platform, np end-to-end z C++ do WPF/Cocoa interoperacyjności

Zdecydowałem się rozpocząć nowy projekt zaprojektowany od podstaw do uruchomienia na wielokrotność platformy (Windows, iOS, OSX, Linux, Android). Ponieważ moje środowisko to głównie C++, zamierzam napisać podstawową funkcjonalność za pomocą C++ 11. W związku z tym na każdej platformie muszę napisać interfejs użytkownika specyficzny dla platformy, który może współdziałać z rdzeniem C++.

Pierwsza platforma, na którą kierujesz to Windows (druga to iOS). Będę miał dane przechowywane w bazie danych SQLite, a także dane dostarczone przez użytkownika, które zostaną wprowadzone za pomocą WPG DataGrid (wstawianie wierszy, manipulowanie istniejącymi danymi itp.). Po raz pierwszy pracuję z WPF (chociaż korzystałem z Windows Forms) i po raz pierwszy pracuję z C++ w zarządzanym środowisku. Planuję stworzyć architekturę w stylu MVC, więc moim zdaniem SQLite jest modelem, WPF jest Viewem, a kod C++ jest kontrolerem.

Moje pytanie jest takie:

Czy istnieją przykłady tam ilustrujące jak chwycić danych z C++ interfejs i wyświetlić go przy użyciu C# i WPF bez niszczenia/maglowania z kodu C++ samego (ponieważ musi pracować na wielokrotność platformy)? Czytałem trochę o P/Invoke (nudne, ale działa) i mieszane zespoły (działa, ale będzie magii mój C++?), Ale Google nie był pomocny, jeśli chodzi o konkretne przykłady (szczególnie te, które obejmują wypełnianie formantów WPF z danymi uzyskanymi przez bibliotekę DLL w C++).

Dzięki!

EDYCJA: Podczas wyszukiwania podejść do tego problemu natknąłem się na CXXI. Nie znam go zbyt dobrze, ale wygląda na to, że może to być proste rozwiązanie mojego problemu. jakieś pomysły? Moje zrozumienie wszystkich tych koncepcji jest ograniczone.

+1

Nie mam żadnych doświadczeń z WPF, ale mogę powiedzieć, że to, co robisz, będzie nieco trudne. Kiedy dojdziesz do aplikacji OS X (i jestem pewien, że iOS jest taki sam), będziesz musiał napisać całkiem sporo kodu Objective-C. Sądzę, że zależy to w dużej mierze od charakteru tworzonej aplikacji, ale zasadniczo trzeba będzie napisać jej wiele razy na każdej platformie. – Hassan

+1

Dzięki za twój wkład Hassana.Wiem, że mam przed sobą dużo pracy, ale moim celem jest kodowanie interfejsu użytkownika natywnie dla każdej platformy. Uważam, że zapewnia to najlepsze wrażenia użytkownika, a także najlepsze doznania edukacyjne :) –

+1

Masz rację, zapewnia najlepszą obsługę. A jeśli najtrudniejszą częścią interfejsu jest stół, to powiedziałbym, że jesteś w dobrej formie. Mam nadzieję, że ktoś teraz odpowiada ... – Hassan

Odpowiedz

3

Po pracy zarówno z XAML, jak i WinForms, nie uważam, aby WPF było bardziej "natywnym" niż w przypadku WinForm. W obu przypadkach wszystko jest pobierane przez .Net. Ale jeśli chcesz nauczyć się WPF, to idź do niego.

P \ invoke działa dobrze, podobnie jak COM. Jeśli chodzi o inne sposoby uzyskiwania danych z C++ na inne języki, rozważ podejście jako problem IPC, a nie językowy. Uruchom jeden proces jako potomek drugiego i spójrz na sockets i bibliotek, takich jak 0mq/clrzmq (see this for 0mq on iPhone-), aby przekonać się C++ do innego procesu.

Z gniazdami/0mq można użyć xml/json/Protobuf/Protobuf-net do serializacji i deserializacji obiektów z jednego języka na drugi. W przypadku Protobuf wystarczy utworzyć tylko jeden zestaw obiektów danych json-esque i użyć specjalnych narzędzi do generowania kodu. To zajmie się twoimi obiektami danych na różnych platformach i językach, pozwalając ci skupić się na zabawnych rzeczach. Serializacja będzie działać dobrze również z sql. Wszystkie te technologie są łatwe do wdrożenia, a każda z nich posiada wiele implementacji językowych, dzięki czemu można łatwo podłączyć do następnego GUI.

Jeśli chodzi o przykłady, wszystko zależy od sposobu przenoszenia danych między środowiskami wykonawczymi.

+0

Sugerujesz, że WinForm może być łatwiejszy? Po prostu założyłem, że najłatwiej będzie pracować z DataGrid WPF. Bardzo podoba mi się pomysł użycia IPC, ale dla tego projektu uważam, że jest zbyt skomplikowany i przesadny. Dzięki za to. Bardzo interesujące. W tym miejscu nadal chciałbym znaleźć przykład bez polegania na kodzie zewnętrznym (przynajmniej w czasie wykonywania). CXXI wygląda interesująco. –

+1

WinForm jest znacznie łatwiejszy niż WPF. Szczerze mówiąc, myślę, że najlepiej będzie z Mono na pulpicie GUI, ale to jest twój telefon. – 0x1mason

+1

Gdyby to był ja, poszedłbym z Mono lub inną warstwą abstrakcji między różnymi platformami, ale to głównie dlatego, że nie lubię prac w interfejsie użytkownika;). Mimo to doceniam to, co próbujesz zrobić, ucząc się, jak działają różne platformy. Być może musisz wyjaśnić, co masz na myśli przez "native" - ​​czy jesteś najbardziej zainteresowany wypróbowaniem różnych technologii, czy też jesteś najbardziej zainteresowany zejściem do nakrętek i śrub w każdym systemie operacyjnym? – 0x1mason

Powiązane problemy