Fragen zu Mono

Hm, das heißt im Grunde: Programmiere ich Mono, laufen meine Anwendungen eigentlich grundsätzlich überall, wo Mono installiert ist. Hat jemand auf Windows .NET installiert läuft es auch, es seidenn mein Programm nutzt Gtk#. Dann muss er entweder Mono oder noch Gtk installieren. Wie ist das mit den Gnome-Libs? Sind die bei Mono dabei? Was muss die Person installieren, wenn sie .NET installiert hat?

Das schlimmste, was passieren kann ist, dass die Anwendungen von Windows nicht unter Linux laufen, weil die .NET Implementierung weiter ist, als Mono, oder sich .NET nicht mehr an Standards hält, oder die Windows-Anwendung zuviele windows-spezifische Funktionen nutzt.

Kann ich denn mit Mono bzw. C# überhaupt Funktionen nutzen, die es unter Windows nicht gibt? Die also unter Windows, auch wenn er Mono installiert nicht laufen?

Gruß

Mike
 
miketech schrieb:
Wie ist das mit den Gnome-Libs? Sind die bei Mono dabei? Was muss die Person installieren, wenn sie .NET installiert hat?

die meisten "gnome-libs" sind bei gtk# dabei
http://gtk-sharp.sourceforge.net/faq.html

Kann ich denn mit Mono bzw. C# überhaupt Funktionen nutzen, die es unter Windows nicht gibt? Die also unter Windows, auch wenn er Mono installiert nicht laufen?

ja, wenn du z.B. dein Programm in gnome integrieren willst und Sachen wie gnome-vfs oder gconf verwendest oder irgendwelche libs (z.B. gettext) einbindest oder wenn du vielleicht spezielle Unix Sachen verwendest die in Mono.Posix drin sind.

Wie schonmal gesagt: 100% integration und 100% Portabilität wird es nie geben. Entweder du willst 100% Protabiliät, dann darfst du nichts Systemspezifisches machen oder du willst 100% Integration, dann wird die Anzahl der unterstützten Systeme kleiner oder du triffst dich irgendwo in der Mitte.
 
Hi,

yup schon klar, ich will nur versuchen rauszufinden, wo die systemspezifischen Dinge sind, d.h. woran ich erkenne, was ich benutzen darf und was nicht.

Ich habe z.B. eben eine Gtk# Anwendung geschrieben und versuche diese unter Windows laufen zu lassen. Bei der Mono-Installation ist Gtk# dabei, d.h. der Anwender muss nur das 26 MB große Paket runterladen. "nur" :) Ist ja einmalig.

.NET wird ja in Zukunft wohl in Windows integriert sein, d.h. der Anwender müsste nur noch gtk# installieren oder?

Und solange ich dann nur mit Gtk rumbastel und Gnome außen vor lasse sollte alles laufen. Und wenn ich nur Konsolen-Anwendungen schreibe sollte es sogar unter .NET dirket gehen, korrekt?

Mike
 
Naja, pauschal kann man das nicht sagen. Vorsichtig mußt du zumindest sein wenn du was aus Gnome. oder Mono.Posix verwendest. Vieles aus Gnome. läuft auch unter windows aber eben nicht alles. Was aber (überwiegend) eine temporäre Situation ist. GtkHTML gibt es auch noch nicht für windows.

Das kommt halt letztlich auf deine Prioritäten an. Ich persönlich programmiere in erster Linie für die GNU, BSD und Unix Plattform und will da auch die volle Leistung nutzen. Wenn das Programm dann out-of-the-box oder mit wenig Änderungen auch unter windows läuft ist es schön, ich lasse mir von windows aber nicht den Spaß nehmen oder tolle Features vorenthalten. ;)

Wenn ich natürlich gezieht etwas für jemanden mache der es unter windows Benutzen will, dann achte ich darauf, dass kommt aber nicht sehr oft vor.
 
Zuletzt bearbeitet:
ok, alles klaro. Ich hab gesehen, dass es sogar die Gecko Engine für Mono gibt. Das finde ich persönlich ziemlich scharf :)

Weiß nicht, inwiefern ich diese auch mit gtkmm oder anderen gtk Bindings nutzen kann, aber ich hatte sowas vor einigen Jahren in Delphi mit ner InternetExplorer-Komponente und fand das ziemlich genial, wenn man mal eine Anwendung schreiben wollte, die mal ne Webseite anzeigen soll.

Unter Linux hab ich das dann bei Java und Qt immer etwas vermisst.

Gruß

Mike
 
Jetzt will ich doch auch mal meinen Senf dazu geben.

Das mit den verschiedenen Sprachen funktioniert imho nur in verschiedenen Assemblys.
Z.B. kannst du die eine Klasse in C# und die andere in VB.NET schreiben und beide können sich gegenseitig nutzen.
Das geht auch mit C++, dann aber nur wenn du Managed Code schreiben lässt.
 
Hallo,

entschuldigt das ich diesen alten "Topic" nochmal rauskrame, ich habe über eine Suchmaschine hierher gefunden.

Zur Zeit stehe ich vor der Entwicklung einer neuen Software, die unter Linux und Windows lauffähig sein soll. Hierbei möchte ich unter Linux GTK2 nutzen, unter Windows sollen die Benutzer die gewohnte Umgebung sehen (also nicht diese Effekte wie bei GTK1, das es deutliche Unterschiede im Erscheinungsbild gibt).

Ich habe bereits bei Google ein wenig rumgesucht, wurde aber nicht so richtig fündig - folgende Fragen stellen sich mir:

1. Eine Möglichkeit wäre, C/C++ und GTK2 zu verwenden. In diesem Fall muss GTK2 auf dem Windows-/Linux-System jeweils installiert sein, nach einer neuen Programmversion ist natürlich ein recompile auf dem jeweiligen Endsystem notwendig. Ich suche in diesem Zusammenhang Screenshots zum Vergleich - insbesondere interessiert mich, wie ein auf GTK2 erstelltes Programm unter Windows/Linux dann aussieht.

2. Zweite Möglichkeit: Mono + GTK#. Hier stellt sich mir dieselbe Frage des Erscheinungsbildes wie bei Punkt 1, da die Oberfläche unter Windows dann auch GTK-basierend wäre. Zusätzlich bin ich mir bei .net-Anwendungen derzeit unsicher, was die Implementierung von Datenbankzugriffen und Reports (zum ausdrucken) anbelangt: Habe ich bei Mono/GTK# die Möglichkeit, auf eine MySQL-Datenbank zuzugreifen? Wenn ich diese Anwendung unter Linux erstelle und auf Windows umkopiere, läuft dann ebenso die Datenanbindung ohne Zusatz-Libs, oder sind bei beiden Varianten Besonderheiten wegen der MySQL-Verknüpfung zu erwarten? Ebenso bei Ausdrucken - wie könnte man diese unter Mono/GTK# einfach erstellen, so das diese unter beiden Systemen anstandslos laufen?

Mir fehlt in diesem Punkt noch etwas die Erfahrung mit .net und Crossplattform-Entwicklung. Bei reinen GTK2-Programmen würden einfach die entsprechenden MySQL-Libs eingebunden werden entsprechend dem Zielsystem, compiliert und fertig - nur ob dies bei .NET genauso einfach geht? ;-)

3. Der folgende Screenshot hat mich noch beeindruckt:

http://wxnet.sourceforge.net/screenshots/

Damit wäre das Problem des "Aussehens" von dem jeweiligen Programm natürlich gelöst, die Portabilität ebenso. Habe aber leider keine Erfahrung mit wxWidgets und es stellen sich mir hierbei dieselben Fragen wie unter Punkt 2.

4. Welche Programme nutzt man am besten, um unter GTK# die UI zu erstellen? Genügt hierfür glade?

Ich möchte eben sicherstellen, das ich für die Zukunft eine Entwicklungsplattform wähle, mit der ich am wenigsten Probleme bekomme und mich ganz aufs Programmieren stürzen kann :-) Da bei künftigen Windows-Versionen sicherlich .NET immer Bestandteil sein wird, wäre es bestimmt kein Problem das Programm dort immer lauffähig zu halten - unter Linux würde eben mono installiert werden, was auch kein größerer Aufwand bedeutet. Mich interessieren aber die Vor-/Nachteile von beiden Varianten und was womit möglich ist.

Michael
 
Hi Michael,

welche Plattform ist denn Dein Favourit? Geht es primär um Windows - Anwendungen, die auch mal eben unter Linux laufen sollen? Oder sind beide Plattformen "gleichwichtig"?

Also was hierbei noch vergessen wurde: Java

Mit Java und SWT hast Du z.B. unter Linux Gtk Look und unter Windows den Windows Style. Oder: Java mit Swing. Derzeit sieht Swing nur unter Windows auf Wunsch native aus, unter Linux noch nicht. Aber in der nächsten Java Version wird Swing auch unter Linux Gtk verwenden können.

Ansonsten: Ja, für Gtk GUIs nutzt Du Glade zum erstellen.

Das Problem, dass Gtk installiert sein muss bei C++ Anwendungen hast Du bei Mono und .NET natürlich auch. D.h. ein Anwender muss auch Gtk# installieren. Bei WXNet besteht dabei dasselbe Problem.

Alternativ hierzu: Windows Forms. Dann hast Du definitiv nativen Look unter Windows und alternativ wird Windows Forms bereits teilweise unter Linux unterstützt, was auch in den nächsten Versionen immer besser sein wird. Natürlich wird es aber nicht so problemlos sein, wie z.B. Gtk, da Windows Forms das GUI Framework von Microsoft ist.

Ach und: MySQL sollte kein Problem sein. Garantieren kann ichs nicht, weil ich es noch nie versucht habe.

Gruß

Mike
 
Hi Mike,

vielen Dank für deine schnelle Antwort. Was die Frage des "Favoriten" anbelangt, so kann ich diese nicht eineutig beantworten - ich persönlich entwickle und arbeite derzeit hauptsächlich unter Linux, sämtliche Clients bei uns werden in Kürze auch darauf umgestellt sein. Aus diesem Grund ist es unabdingbar, das die Anwendung natürlich auch dort lauffähig sein muss. Da es aber auch Anwender geben wird die noch oder weiterhin Windows nutzen, möchte ich "zweigleisig" fahren wobei wenn möglich der geringsmöglichste Aufwand dabei entstehen soll um beide Plattformen zu unterstützen.

Bei der Frage zwischen Java und .NET würde ich derzeit letzteres vorziehen - wie bereits erwähnt ist .NET in Zukunft sicherlich auf jedem Windows-System vorinstalliert. Die Anwendungen behalten die gewohnte Geschwindigkeit und sind ohne recompile lauffähig - das ganze klingt für einen Entwickler natürlich traumhaft, obwohl es mir nicht unbedingt etwas ausmacht das Programm für eine andere Plattform neu compilieren zu müssen (solange dies einwandfrei und ohne viel Änderungen funktioniert). Die Java-Runtime ist nicht immer vorinstalliert und kann je nach Version auch mal "Zicken" machen so das es zu Problemen kommt - und der letzte Grund ist einfach der, das ich derzeit kein Java kann ;-)

An wxWidgets stört mich derzeit der Zusatzaufwand - ich muss die entsprechenden Libs zusätzlich installieren zu .NET, wobei wir schon bei 2 Paketen sind. Muss gtk dabei eigentlich auch nochmal installiert sein? Andererseits unterstützt wx.net die native Oberfläche bei Windows, bei Linux wird gtk2 benutzt - erspart somit eine Menge an Arbeit, wenn man so weit wie möglich das Aussehen der Endanwendung auf dem OS erhalten lassen möchte.

WindowsForms ist meines Wissens derzeit noch lange nicht ausgereift - Mono "hinkt" also hinterher, wie es derzeit mit der zweiten Version von .NET an Unterstützung steht weiss ich leider auch nicht, vermute aber das damit der Abstand noch größer wird, wo doch nur .NET 1.x unterstützt wird.

Die einzigen Punkte die mir eben etwas "Unbehagen" bereiten, ist die Unterstützung von Datenbankzugriffen und Reportedruck unter beiden Systemen per C# - sofern hier die Unterstützung gewährleistet ist, bestünde zumindest theoretisch kein Grund das ganze nicht mit Mono zu versuchen.

Michael
 
Hi,

ok dann ist Linux doch eher die zukünftigere Plattform für Deine Anwendung, aber Windows muss ebenfalls unterstützt werden.

Also zunächst wird .NET vermutlich auch bei Windows Vista nicht per Default mit installiert werden. D.h. der Endanwender muss .NET nachinstallieren und zusätzlich Gtk#, oder WX.NET. Er kann natürlich statt .NET auch Mono mit Gtk# für Windows installieren. D.h. der Aufwand ist mit Java identisch.

.NET Anwendungen laufen auch nicht unbedingt schneller, als Java-Anwendungen, weil die Technik dahinter dieselbe ist.

Also so gesehen hat .NET nun keinen Vorteil gegenüber Java. Das Argument, dass Du Java nicht kannst, während Du bereits C# Kenntnisse hast ist eher das schlagkräftige Argument. Da der minimale Aufwand im Vordergrund stehen sollte, fährst Du mit C# und Mono/.NET sicherlich ganz gut.

Persönlich finde ich Gtk angenehmer, als die WxWidgets. Wie es nun aber mit einem nativen Look für Gtk# unter Windows aussieht weiß ich nun nicht. Auf den Screenshots, die ich von Gtk# kenne sehen die Anwendungen unter Windows immer etwas fremdartig aus, was aber im Grunde nicht sooo schlimm ist. Es seidenn Du findest an WxWidgets mehr gefallen. Vielleicht findest auch ein natives Theme für Gtk#.

Gruß

Mike
 
Hi,

hättest du evtl. einige Links zu Screenshots von gtk# Anwendungen, die unter Windows laufen? Notfalls würde ich auch eine Anwendung einmal testweise installieren, dann kann man direkt auf beiden Systemen einmal das ganze vergleichen - oder direkt eine kleine Gtk#-Testanwendung erstellen, compilieren und es eben anschauen :-)

wxWidgets kenne ich nur von der Webseite her und von vlc (kann man mit einer solchen Oberfläche compilieren). Allerdings habe ich zu wx.net noch kein Paket zu meiner Distribution gefunden (Gentoo), müsste also notfalls selbst ein ebuild schreiben was wieder etwas aufwendig wäre.

Was mich aber zuletzt noch sehr interessiert:
Für die Anwendung ist es sehr wichtig, Dokumente drucken zu können - diese kämen dann direkt aus der MySQL-DB. Report-Generatoren sind bei sowas natürlich eine schöne Sache, bei einigen Crossplattform-Sprachen weiss ich aber, das diese meist nur für ein OS verfügbar sind. Gibt es unter Mono/.NET eine Möglichkeit, soetwas auf leichtem Wege einzubauen? Wie wird sowas bei Java gelöst?

Michael
 
Hi,

also hier ist z.B. der PornViewer unter Windows:

http://docs.codehaus.org/download/attachments/18179/pornBrowserScreen.png

Hier wird grad eine Gtk# Anwendung unter Windows geschrieben:

http://www.mfconsulting.com/tutorial/newgladeapp/pic/vsnewgladeappStep07.png

Bei Google finden sich dafür sicherlich noch mehr und es sieht mittlerweile auch gar nicht mehr so schlimm aus, wie früher. Die Buttons scheinen zumindest schonmal native zu sein, ebenso die Scrollbars. Vielleicht ja noch mehr.

Zu Deinen Reports: Inwiefern Mono so etwas bereits unterstützt weiß ich nicht. Der Vorteil von Java ist, dass es bereits sehr bekannt ist, weshalb Du im Internet sicherlich bereits eine Menge von Tools zu diesem Thema finden wirst.

Da aber auch die Mono Community nicht schläft wirst Du, wenn so etwas nicht bereits native unterstützt wird auch hierzu etwas finden. Ansonsten bleibt vielleicht nur selbst schreiben, was aber denke ich nicht zu aufwendig sein sollte, wenn Du es auf Deine Aufgaben beschränkst.

Gruß

Mike
 
Hi Mike,

danke für die Screenshots - ich habe mir heute Nacht auch einmal die Mühe gemacht und eine GTK# Anwendung unter Linux/Windows laufen lassen. Komischerweise sehen die Controls dort aber noch nach "altem Gtk-Stil" aus (habe gtk# 2.3.92 benutzt) - das ist eigentlich genau das, was ich nicht haben wollte :-)

Den Installer für die Windows-Runtimes habe ich von dieser Seite:
http://forge.novell.com/modules/xfmod/project/?gtks-inst4win

Das ganze hat auch einwandfrei geklappt mit der Installation, nachdem ich noch ein paar DLLs vom System gesäubert habe. Mit dabei war auch ein "Theme-Selector", der aber nicht so die gewünschten Ergebnisse zutage bringt. Die Readme-Datei sagt hierzu folgendes:

"This release uses GTK+ 2.8. Notice that the Gtk# version in use here
are 1.0.10 and 2.3.92"

Letzteres irritiert mich etwas - könnte es sein, das die Runtime evtl. gtk1 benutzt hatte zur Darstellung? Ich habe das Programm unter Linux mit diesen Bibliotheken erstellt:

Code:
using Gtk;
using GtkSharp;
using System;

Ist natürlich dann die Frage, welche Libs er bei Windows benutzt - unter Linux sieht es zumindest einwandfrei aus. Nutze derzeit übrigens die normale Microsoft .NET Runtime, also noch nicht Mono installiert auf dem Windows-Rechner.

Michael
 
Hi,

also ich kann mir eigentlich nicht vorstellen, dass man mit Gtk# sogar Gtk1 Programme unter Windows laufen lassen kann.

Wofür hast Du denn using gtksharp in Deinem Programm? Using gtk sollte reichen, oder?

Mehr weiß ich leider auch nicht.

Gruß

Mike
 

Ähnliche Themen

Gui tools entwickeln unter linux

Zusammenhang Glib <-> Gtk

GUI Programmierung: Toolkit vergleich

Soviele Fragen eines Umsteigers passen nicht in den Titel ^^'

Java 5 - Performance und Vergleich zu C++

Zurück
Oben