Итак, у меня есть этот код в консольном приложении .NET 2.0:
[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);
И когда я пытаюсь запустить это приложение через Mono на чистой установке 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, и я хотел бы, чтобы он работал так же под Mono. Кто-нибудь есть какие-либо предложения относительно того, что я могу попытаться заставить его работать под обеими ОС?