2012-07-03 5 views
5

Zunächst einiger Hintergrund:die Suche nach einem plattformübergreifende End-to-End-Beispiel für C++ zu WPF/Cocoa Interoperabilität

Ich habe beschlossen, ein neues Projekt von Grunde zum Starten auf mehrere zu laufen Plattformen (Windows, iOS, OSX, Linux, Android). Da mein Hintergrund meistens C++ ist, beabsichtige ich, die Kernfunktionalität mit C++ 11 zu schreiben. Dazu muss ich auf jeder Plattform eine plattformspezifische UI schreiben, die mit dem C++ - Kern interagieren kann.

Die erste Plattform, die ich anvisiere, ist Windows (die zweite ist iOS). Ich werde Daten in einer SQLite-Datenbank sowie von Benutzern bereitgestellte Daten gespeichert haben, die mit einem WPF DataGrid eingegeben werden (Zeilen einfügen, vorhandene Daten bearbeiten usw.). Dies ist das erste Mal, dass ich mit WPF arbeite (obwohl ich Windows Forms verwendet habe) und mein erstes Mal mit C++ in einer verwalteten Umgebung arbeite. Ich plane, dies zu einer MVC-artigen Architektur zu machen, daher ist SQLite das Modell, WPF ist die Ansicht und der C++ - Code ist der Controller.

Meine Frage lautet:

Gibt es Beispiele gibt, die zeigen, wie Daten aus einer C++ Schnittstelle greifen und anzeigen C# und WPF ohne sie zu zerstören/Mangeln den C++ Code selbst (da es auf mehreren arbeiten müssen Plattformen)? Ich habe ein kleines bisschen über P/Invoke gelesen (langwierig, aber funktioniert) und gemischte Assemblies (funktioniert, wird aber mein C++ kaputt machen?), Aber Google war nicht hilfreich, wenn es um konkrete Beispiele geht (vor allem um WPF-Steuerelemente zu füllen) mit Daten erhalten über eine C++ DLL).

Danke!

EDIT: Bei der Suche nach Lösungsansätzen für dieses Problem stieß ich auf CXXI. Ich bin nicht sehr damit vertraut, aber es scheint, als wäre es eine einfache Lösung für mein Problem. Irgendwelche Gedanken? Mein Verständnis all dieser Konzepte ist begrenzt.

+1

Ich habe keine WPF Erfahrung, aber ich kann Ihnen sagen, dass das, was Sie tun, etwas schwierig sein wird. Wenn Sie zur OS X-App kommen (und ich bin mir sicher, dass iOS die gleiche ist), müssen Sie einiges an Objective-C-Code schreiben. Ich denke, es hängt weitgehend von der Art der App ab, die du machst, aber im Grunde wirst du vieles für jede Plattform neu schreiben müssen. – Hassan

+1

Danke für Ihre Eingabe Hassan.Ich weiß, dass ich eine Menge Arbeit vor mir habe, aber mein Ziel ist es, die Benutzeroberfläche nativ für jede Plattform zu programmieren. Ich denke, das bietet die beste Benutzererfahrung sowie die beste Lernerfahrung :) –

+1

Sie haben Recht, es liefert die beste Benutzererfahrung. Und wenn der schwierigste Teil der Benutzeroberfläche der Tisch ist, dann würde ich sagen, dass Sie in guter Verfassung sind. Ich hoffe jemand antwortet jetzt tatsächlich ... – Hassan

Antwort

3

Nachdem ich mit XAML und WinForms gearbeitet habe, glaube ich nicht, dass WPF viel "nativer" ist als WinForms. In beiden Fällen wird alles von .Net abstrahiert. Aber wenn Sie WPF lernen wollen, dann gehen Sie dafür.

P \ invoke funktioniert genauso gut wie COM. Für andere Möglichkeiten, Daten von C++ in andere Sprachen zu übertragen, sollten Sie in Betracht ziehen, sich eher mit einem IPC-Problem als mit einer Sprache zu befassen. Führen Sie einen Prozess als Kind des anderen aus und schauen Sie sich sockets und Bibliotheken wie 0mq/clrzmq (see this for 0mq on iPhone - this for Android) und Thrift an, damit C++ mit dem anderen Prozess kommuniziert.

Mit Sockets/0mq können Sie xml/json/Protobuf/Protobuf-net verwenden, um Objekte von einer Sprache zur anderen zu serialisieren und zu deserialisieren. Mit Protobuf müssen Sie nur einen Satz von json-esque-Datenobjekten erstellen und die sprachspezifischen Tools zum Generieren von Code verwenden. Dadurch werden Ihre Datenobjekte plattform- und sprachenübergreifend verwaltet, sodass Sie sich auf die tollen Inhalte konzentrieren können. Serialisierung funktioniert auch gut mit sql. Alle diese Technologien sind einfach zu implementieren und jeder hat eine Reihe von Sprachimplementierungen, so dass es einfach ist, die Dinge mit Ihrer nächsten GUI zu verbinden.

In Bezug auf Beispiele hängt alles davon ab, wie Sie Ihre Daten zwischen den Laufzeiten verschieben möchten.

+0

Schlägst du vor, dass WinForms einfacher sein könnten? Ich nahm einfach an, dass mit dem WPF DataGrid am einfachsten zu arbeiten wäre. Ich mag die Idee der Verwendung von IPC wirklich, aber für dieses Projekt finde ich es zu komplex und übertrieben. Danke dafür. Sehr interessant. An diesem Punkt möchte ich immer noch ein Beispiel finden, ohne auf externen Code angewiesen zu sein (zumindest zur Laufzeit). CXXI sieht interessant aus. –

+1

Winforms ist viel einfacher als WPF. Ehrlich gesagt, denke ich, dass du mit Mono für deine Desktop-GUIs am besten bist, aber es ist dein Ruf. – 0x1mason

+1

Wenn ich es wäre, würde ich mit Mono oder einer anderen plattformübergreifenden GUI-Abstraktionsschicht arbeiten, aber das liegt hauptsächlich daran, dass ich keine UI-Arbeit genieße;). Trotzdem schätze ich, was Sie zu tun versuchen, indem Sie lernen, wie die Dinge plattformübergreifend funktionieren. Vielleicht müssen Sie klarstellen, was Sie mit "nativ" meinen - sind Sie am meisten daran interessiert, verschiedene Technologien auszuprobieren, oder sind Sie am meisten daran interessiert, sich mit den wichtigsten Funktionen jedes Betriebssystems vertraut zu machen? – 0x1mason

Verwandte Themen