2008-11-12 8 views
6

Ich entwickle Rich-Client-Software unter Mac OS X und Linux. Ich möchte eine Anwendung auf Windows portieren und nicht ein Benutzer von Microsoft-Produkten sein, ich bin nicht sehr vertraut mit Windows im Allgemeinen.Welche Windows-API wähle ich für eine Rich-Client-Anwendung?

Was mit Ich kenne:

Unter Mac OS X, ich habe die Möglichkeit, Cocoa und Objective C oder Kohlenstoff und C/C++. Unter Linux habe ich die Option von GTK + und C/C++ oder Qt und C++. Ich bevorzuge Cocoa unter Mac OS X und GTK + unter Linux. Interface Builder für Kakao und Glade für GTK + machen mein Leben einfach. Es ist Spaß, Rich-Clients in diesen Betriebssystemen zu erstellen.

Meine Kernklassen, oder "Modell" in MVC, wird in plattformübergreifendem C++ geschrieben. Die Benutzeroberflächenklassen oder "View and Controller" in MVC sind in der "bevorzugten" Sprache und GUI-API für jede jeweilige Plattform geschrieben.

C++ ist die Sprache, mit der ich am meisten vertraut bin. Ich benutze die Boost-Bibliotheken ausgiebig. Besonders Smart Pointer, Threads und Asio-Netzwerkbibliotheken. Für Unicode, Lokalisierung usw. verwende ich International Components for Unicode (ICU).

Frage 1: Was ist die "bevorzugte" Sprache und GUI-API für die Windows-Plattform, die mit meinen plattformübergreifenden Modellklassen kompatibel ist?

Frage 2: Wie greife ich auf meine plattformübergreifenden Modellklassen zu?

Unter Mac OS X beispielsweise greife ich über Controller-Klassen auf meine Modellklassen zu. Die Controller-Klassen sind in Objective-C++ implementiert. Objective-C++ ist eine Mischung aus C++ und Objective-C. Zeigen Sie Objekte "sprechen" mit Controllerobjekten in Objective-C an, während die Controllerobjekte in C++ mit Modellobjekten "sprechen".

Unter Linux sind alle Klassen in C++ implementiert.

Antwort

1

GTK + funktioniert gut unter Windows. Wenn Sie damit schon vertraut sind, würde ich das verwenden. Obwohl die Leistung wahrscheinlich nicht der Leistung nativer Windows-UI-Bibliotheken wie MFC entspricht, ist es gut genug, es sei denn, Ihre Anwendung ist wirklich leistungsabhängig. Ein großes Beispiel für die Verwendung von GTK + für alle Plattformen ist Pidgin.

Kann Ihre zweite Frage nicht wirklich beantworten, ohne Code zu sehen, aber ich sehe nicht, warum es sich von Ihrem Model-View-Controller-Ansatz auf anderen Plattformen unterscheidet.

+0

richtig, es gibt keinen Nutzen beim Schreiben von Windows-only-Code, wenn Sie es crossplatform behalten können. natürlich würde ich Qt über GTK + bevorzugen (kein Performance-Overhead oder GUI-Mistmatch!), aber die Frage erwähnt bereits GTK +, also behalte es einfach. – Javier

1

Windows Presentation Foundation (WPF) ist der neue Microsoft Rich App-Standard für Windows. Ihr C++ wird dazu portieren, aber die meisten Leute entwickeln C# dagegen.

2

Wenn Sie Ihr C++ mit der Visual Studio-Toolchain kompilieren können (anstatt gcc oder mingw), würde ich Ihnen sehr empfehlen, eine .lib zu erstellen und sie dann in eine C++/CLI-Assembly zu verknüpfen verwaltete API zu Ihrer Bibliothek.

Dann können Sie C# und WinForms API oder WPF verwenden und haben eine sehr reiche und native Windows-App. Diese Arbeit ist ziemlich einfach und wenn Sie bereit sind, die GUI neu zu schreiben, wird es das beste Ergebnis haben und am einfachsten zu implementieren sein.

Ein Nachteil ist, wenn Sie es brauchen, um auf Maschinen zu arbeiten, wo .NET möglicherweise nicht vorhanden ist - wenn ja, würde ich bei .NET 2.0 (und WinForms) bleiben. Sie sollten auch Ihr Installationsprogramm erkennen und installieren. Wenn Sie bereit sind, .NET 3.5 zu installieren, wenn nicht vorhanden, dann gehen Sie zu WPF.

4

Es gibt nicht wirklich eine "bevorzugte" Sprache und API unter Windows, eher wie viele Möglichkeiten. Die offensichtlichen sind rohe Win32-Aufrufe direkt an das Betriebssystem (also wirklich nur C-Aufrufe), oder eine dünne Abstraktion darüber (zB WTL, Windows Template Library, die C++ ist), oder eine dickere Abstraktion (zB MFC, auch C++).

Microsoft drängen heutzutage ziemlich hart WPF, aber das ist ein Teil der verwalteten .NET-Welt. Sie können C++ schreiben, so dass Sie Ihre Anwendung möglicherweise portieren können, aber ich würde erwarten, dass dies ein erheblicher Aufwand wäre.

Angesichts der Tatsache, dass Sie GTK + oder QT unter Linux verwenden, wäre es naheliegend, beide unter Windows zu verwenden, da beide existieren - auf diese Weise könnten Sie die Linux- und Windows-Versionen nahezu identisch halten. Sie sind keine natürliche Wahl für eine Windows-Anwendung, da sie ursprünglich nicht aus der Windows-Welt stammen, aber angesichts Ihres Hintergrunds würden sie sehr sinnvoll sein. Sie müssen möglicherweise etwas Zeit in die Optimierung einarbeiten, damit die Windows-Anwendung genau richtig aussieht und sich anfühlt. Dies sollte jedoch durch die fehlende Notwendigkeit, eine komplett neue Präsentationsebene zu schreiben, mehr als ausgeglichen werden.

4

Qt funktioniert gut mit Windows. Außerdem ist es plattformunabhängig.

0

Ich bin auf die Windows Presentation Foundation gelehnt. Ich denke, es ist Microsofts Antwort auf Cocoa unter Mac OS X insofern, als "es eine Reihe von Anwendungsdiensten vereinheitlichen soll: Benutzeroberfläche, 2D- und 3D-Zeichnung, feste und adaptive Dokumente, fortgeschrittene Typografie, Vektorgrafiken, Rastergrafiken, Animation, Datenbindung , Audio und Video." Das klingt nach Cocoa mir :-)

ich die Implementierung nehme an meinem Mac OS X Implementierung ähnlich sein würde:

  • Modell: Cross-Plattform C++ Klassen
  • Ausblick: WPF und C#
  • Controller: C++/CLI oder etwas anderes

während auf Mac OS X, Ansicht Klassen werden in Objective-C implementiert, während Controller-Klassen Objective-C++ implementiert sind. Zeigen Sie Objekte "sprechen" mit Controllerobjekten in Objective-C an, während die Controllerobjekte in C++ mit Modellobjekten "sprechen".

Ist C++/CLI unter Windows wie Objective-C++ unter Mac OS X oder sind C# -Klassen Ich definiere unzugänglich in C++/CLI?

Was ist der "richtige" oder "bevorzugte" Weg, um auf C++ - Klassen von einer verwalteten .Net-Sprache zuzugreifen?

+0

Sie würden die C# -Ansicht in einer Assembly erstellen und zu einer anderen in C++/CLI integrierten Assembly aufrufen. Sie können Ihre plattformübergreifenden C++ - Klassen auf verschiedene Arten in die C++/CLI-Assembly integrieren, z. B. durch Verknüpfen der Objektdateien als statische native Bibliothek oder durch Kompilieren der Quelle in verwalteten Code. – tragomaskhalos

Verwandte Themen