2009-03-09 17 views
0

So habe ich diesen Code in einer .NET 2.0-Konsole App:Mit diesem Win32 Interop-Code unter Mono arbeiten?

[DllImport("kernel32.dll")] 
private static extern bool SetConsoleTextAttribute(IntPtr hConsoleOutput, 
    int wAttributes); 

[DllImport("kernel32.dll")] 
private static extern IntPtr GetStdHandle(uint nStdHandle); 

private static readonly IntPtr hConsole; 

Und dann in einer Methode, die ich dieses:

const uint STD_OUTPUT_HANDLE = 0xfffffff5; 
hConsole = GetStdHandle(STD_OUTPUT_HANDLE); 

Und wenn ich versuche, auf eine dieser App durch Mono ausführen saubere Installation von Ubuntu 8.10 ich diese Ausnahme erhalten:

Unhandled Exception: System.TypeInitializationException: 
An exception was thrown by the type initializer for 
    IMAPShell.Helpers.ColorConsole ---> 
     System.EntryPointNotFoundException: GetStdHandle 
    at (wrapper managed-to-native) IMAPShell.Helpers.ColorConsole:GetStdHandle (uint) 
    at IMAPShell.Helpers.ColorConsole..cctor() [0x00000] --- End of inner exception stack trace --- 

    at IMAPShell.Program.PrintWelcome() [0x00000] 
    at IMAPShell.Program.Main (System.String[] args) [0x00000] 

im Grunde, was ich tue die Farbe der Konsolenausgabe ändert. Ich habe diese handliche Methode geschrieben, mit der man Farbcodes in eine Textfolge einbetten kann und die Codes analysiert und die Farbe der Ausgabe ändert, bis sie auf einen anderen Farbcode trifft.

Es funktioniert gut auf Windows, und ich würde es gerne gleich unter Mono arbeiten. Hat jemand irgendwelche Vorschläge, was ich versuchen kann, um es unter beiden Betriebssystemen zu arbeiten?

Antwort

1

Können Sie nicht stattdessen Console.BackgroundColor und Console.Foreground verwenden? Auf diese Weise müssen Sie nicht durch die Interop-Ebene gehen.

4

Mono implementieren Sie das .Net-Framework für Sie. Es implementiert keine Windows-API. PInvoke ist nur Aufrufe in Win32 API mit LoadLibrary und GetProcAddress. Sie können nicht erwarten, dass PInvoke, das die Win32-API aufruft, unter Linux funktioniert.

Verwandte Themen