Mono bzw. DotGNU für alle? Was ist mit .NET?

Smalltalk
Tunix
Beiträge: 447
Registriert: 05.04.2002 12:50:26

Beitrag von Tunix » 18.12.2006 23:56:13

gms hat geschrieben:[für GTK/GTK+ gibt es für nahezu alle gängigen Programmiersprache (auch für C# und Java) entsprechende Bindings, diese Aussage "es sei zuwenig gekapselt" kann ich wirklich nicht ernst nehmen.
Ich spreche nicht von den durchaus üppig vorhandenen Language-Bindings, sondern von portabel geschriebenen Programmen, die sich mit relativ wenigen Änderungen im Quellcode unter Windows wie auch unter Unices zum Laufen bewegen lassen. GTK war unter Windows lange Zeit ziemliches Frickelwerk und in den 1.x Versionen ziemlich instabil. Auch heute ist GTK noch lange nicht erste Wahl für Windows-Projekte.
gms hat geschrieben:Du hast dies als Vorteil des .NET Framework vorgebracht und diesen Vorteil gibt es definitiv nicht. Für C++/CLI gibt es noch nicht einmal eine ernsthafte Planung.

Ich habe auch nie dem .NET Framework jeglichen Sinn abgesprochen, das legst du mir hier in den Mund.

Nur die Vorteile der Sprachunabhängigkeit sind unter Linux eben nur sehr bedingt gegeben und zu einem plattformunabhängigen Framework fehlt momentan auch noch sehr viel.
Es war nicht meine Absicht Dir etwas in den Mund zu legen. Ich habe auf der anderen Seite auch nicht behauptet, dass es diese Vorteile alle schon unter Linux gäbe. Und richtig, konkret habe ich von den Möglichkeiten von .NET selbst gesprochen und nicht vom derzeitigen Stand von Mono oder DotGNU. Unter .NET ist das von mir vorgebrachte Szenario eben möglich, und ich hätte nichts dagegen, wenn das auch bei den anderen Implementierungen irgendwann der Fall sein sollte. Dass das der IST-Stand von Mono und DotGNU noch nicht hergibt ist mir durchaus klar.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 19.12.2006 00:57:40

Tunix hat geschrieben: GTK war unter Windows lange Zeit ziemliches Frickelwerk und in den 1.x Versionen ziemlich instabil.
das war wirklich kaum zu gebrauchen, hier sind wir uns also einig :)
Tunix hat geschrieben: Und richtig, konkret habe ich von den Möglichkeiten von .NET selbst gesprochen und nicht vom derzeitigen Stand von Mono oder DotGNU.
hier eigentlich auch :)
angeregt duch die Euphorie die "meandtheshell" hier verstrahlt hat :), habe ich mich auch ein bißchen näher mit C# beschäftigt, und in die Gui Entwicklung ( unter Windows, ohne GTK ) hineingeschnuppert und dazu auch einige Codebeispiele betrachtet. In sehr vielen Beispielen habe ich dann Codestücke wie dieses gefunden:

Code: Alles auswählen

		[DllImport("user32.dll", EntryPoint="SendMessageA")]
		public static extern int SendMessage (IntPtr hwnd, int wMsg, IntPtr wParam, object lParam);
Werden diese Win32 API Aufrufe von Mono (unter Linux) abgefangen und dann umgelenkt,
oder brauche ich dann WINE,
oder gibt es eine andere Möglichkeit von C# auf das WAPI zuzugreifen,
oder kann ich keine "aufwendigeren" GUI Elemente (Stichwort OwnerDraw) bauen, ohne die Portabilität aufzugeben ?

Gruß
gms

Tunix
Beiträge: 447
Registriert: 05.04.2002 12:50:26

Beitrag von Tunix » 19.12.2006 01:43:03

gms hat geschrieben:In sehr vielen Beispielen habe ich dann Codestücke wie dieses gefunden:

Code: Alles auswählen

		[DllImport("user32.dll", EntryPoint="SendMessageA")]
		public static extern int SendMessage (IntPtr hwnd, int wMsg, IntPtr wParam, object lParam);
Werden diese Win32 API Aufrufe von Mono (unter Linux) abgefangen und dann umgelenkt,
oder brauche ich dann WINE,
oder gibt es eine andere Möglichkeit von C# auf das WAPI zuzugreifen,
oder kann ich keine "aufwendigeren" GUI Elemente (Stichwort OwnerDraw) bauen, ohne die Portabilität aufzugeben?
Direkte Win32-API-Zugriffe sind unter .NET verpönt, COM-Schnittstellen ebenfalls, für die man noch diverse Wrapper-Klassen benötigt (und das ist ziemlich wacklig, es gibt einen riesigen Wälzer für COM unter .NET dazu). Als API ist halt die .NET Base Class Library vorgesehen, die dann die entsprechednen Windows.Forms-Klassen enthält. Auch arbeitet man nicht mehr mit einer Message-Loop, sondern mit sog. Events. Letztere sind ein Stilmittel von C# (und auch VB.NET), um Callback-Funktionen abzubilden.

Zum Stichwort "OwnerDraw": Unter .NET 1.0 (damit habe ich gearbeitet) gab es tatsächlich einige Möglichkeiten nicht, die die Win32-API bot, allerdings kann ich mich dunkel daran erinnern, dass ich bei einem Listenfeld und bei einer Pane einer Statusleiste eigene Sachen hinein gezeichnet habe (das ist jetzt 3-4 Jahre her, von daher kann ich hier leider keine Details memorieren). Ich gehe allerdings davon aus, das die Einschräkungen der BCL mittlerweile geringer geworden sind.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 19.12.2006 16:36:32

@Tunix
danke für deine Erklärung, bezüglich der "Spezial Effekte" dürfte sich auch etwas getan haben:

Mono 1.2.2 ist ja gerade nach Testing gewandert, da sollte ja WIndows.Froms schon drinnen sein:
release notes von mono 1.2 hat geschrieben: Windows.Forms
The Windows.Forms 1.1 API is now available, it includes all of the controls in the standard specification, a complete System.Drawing implementation.
The Windows.Forms implementation has a WndProc compatible design, so most third party widgets that use WndProc to achieve special effects will work out of the box.
Currently there are drivers for X11 and Win32 and will run on Windows systems or systems with the X11 windowing system (Linux, Unix and OSX when using the X11 package).
das hört sich ja schon einmal gar nicht schlecht an. Werde das einmal in den nächsten Tagen testen. Ich brauche immer wieder komplexere Grid-/Treecontrols ( z.B. mit Checkboxen drinnen, etc).

Gruß
gms

Antworten