MonoDevelop und GTK# und Windows 7 Probleme

Wenn man in MonoDevelop eine GTK# Anwendung schreibt und sie zwingt auf „jeder CPU“ zu laufen so wird diese Anwendung beim Start abstürzten. Meist sieht das dann so aus:

Unbehandelte Ausnahme: System.TypeInitializationException: 
Der Typeninitialisierer für "Gtk.Application" hat eine Ausnahme verursacht. 
System.BadImageFormatException: Es wurde versucht, eine Datei mit einem falschen Format zu laden.
(Ausnahme von HRESULT: 0x8007000B)

 bei GLib.Thread.glibsharp_g_thread_supported()
 bei GLib.Thread.get_Supported()
 bei Gtk.Application..cctor()
 
--- Ende der internen Ausnahmestapelüberwachung ---
 bei Gtk.Application.Init()
 bei testapp.MainClass.Main(String[] args) in d:\testapp\Main.cs:Zeile 10.

Das Problem ist wohl das es noch keine x64 GTK# Bibliothek für Windows gibt. Aus diesem Grund sollte man seine Assemblys auf x86 stellen, dann klappt es auch mit Windows 7.

Weitere Informationen gibt es unter:
http://mono.1490590.n4.nabble.com/windows-7-x64-and-gtk-app-td1516626.html

Midi Sheet Music

Auf Sourceforge gibt es das Projekt Midi Sheet Music (http://sourceforge.net/projects/midisheetmusic/, http://midisheetmusic.sourceforge.net/). Dabei handelt es sich um eine Software in welche man eine MIDI Datei einladen kann und anschließend eine Notenansicht bekommt. Beim Abspielen zeigt die Software dann an welche Tasten(kombinationen) für welche Noten gespielt werden müssen. Die Software läuft dabei auf Windows, Linux und MacOS, ist in C# geschrieben und steht unter der GPL.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/MIDI

Undo Framework

Wenn man größere Anwendungen schreibt, so haben diese meist eine Undo & Redofunktion. Damit man das Rad nicht neu erfinden muss, gibt es sogenannte Undo Frameworks. Ein schönes Framework für .NET ist das Undo Framework welches unter http://undo.codeplex.com/ zu finden ist. Es basiert dabei auf dem Entwürfsmuster Kommando (http://de.wikipedia.org/wiki/Kommando_%28Entwurfsmuster%29) und ist relativ einfach zu benutzen.

Weitere Informationen gibt es unter:
http://blogs.msdn.com/b/kirillosenkov/archive/2009/06/29/new-codeplex-project-a-simple-undo-redo-framework.aspx
http://blogs.msdn.com/b/kirillosenkov/archive/2009/07/02/samples-for-the-undo-framework.aspx

Auf ein HashSet mittels eines Indicies zugreifen

Man nehme folgendes Stück C# Quelltext:

HashSet test=new HashSet();

Das Problem an einem solchen HashSet ist, das man nicht mittels eines Indicies auf dieses zugreifen können. Die Zeile:

string tmp=test[5];

würde also nicht funktionieren. Abhilfe schafft hier die Klasse SortedSet:

SortedSettest=new SortedSet();

Nun kann man mittels ElementAt über einen Indice selektiert werden:

string tmp=test.ElementAt(5);

Wichtig ist dabei das der Namesspace System.Linq eingebunden ist da diese Funktionalität über eine Extension implementiert wird.

FullName Eigenschaft der .NET Typen

In .NET/Mono kann man ja eine Variable nach ihrem Typ fragen:

bool test=true;
test.GetType().FullName;

Die FullName Eigenschaft gibt dabei einen String mit der Bezeichnung des Datentypes zurück. Da ich ab und an eine Liste dieser „Fullnames“ benötigt, gibt es das ganze nun hier:

  • bool -> Boolean-> System.Boolean
  • byte -> Byte -> System.Byte
  • DateTime -> DateTime -> System.DateTime
  • double -> Double -> System.Double
  • int -> Int32 -> System.Int32
  • long -> Int64 -> System.Int64
  • short -> Int16 -> System.Int16
  • string -> String -> System.String
  • uint -> UInt32 -> System.UInt32
  • ulong -> UInt64 -> System.UInt64
  • ushort -> UInt16 -> System.UInt16

Es handelt sich dabei jeweils um den C# Alias, die .NET Bezeichnung und den Fullname.