2009-03-09 6 views
0

だから私は、.NET 2.0のコンソールアプリでこのコードを持っている:私はこれを持っている方法でこのWin32 InteropコードをMonoで動作させるには?

[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; 

そして:

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

と私はAの上にモノを通じて、このアプリを実行しようとすると、 Ubuntu 8.10のクリーンインストールこの例外が発生する:

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] 

基本的に私はコンソール出力の色を変更しています。私はこの便利な方法を書いて、テキストの文字列にカラーコードを埋め込むことができ、コードを解析し、別のカラーコードにヒットするまで出力の色を変更します。

これは、Windows上でうまく動作し、私はそれがモノの下で同じことをしたいと思います。誰も私は両方のOSの下で動作するようにしようとすることができますとして、任意の提案をしていますか?

答えて

1

Console.BackgroundColorとConsole.Foregroundの色を代わりに使用できませんか?この方法で、interopレイヤーを通過する必要はありません。

4

モノは.Netフレームワークを実装します。それはWindows APIを実装していません。 PInvokeは、LoadLibraryとGetProcAddressを使用してWin32 APIに呼び出すだけです。 Win32 APIを呼び出すPInvokeがLinux上で動作することは期待できません。

関連する問題