我一直在尝试在Windows命令提示符下创建游戏引擎,主要是出于教育目的,并了解我可以将其推进多远。我偶然发现了一个错误,我还不太清楚如何解决。
public ConsoleEngine(int width = 32, int height = 32, int fontW = 8, int fontH = 8) {
Console.SetWindowSize(width, height);
Console.SetBufferSize(width, height); < IOException: 'The parameter is incorrect'
Console.CursorVisible = false;
ConsoleBuffer = new ConsoleBuffer(width, height);
KeyBuffer = new KeyBuffer();
ConsoleFontSize.SetFontSize((short)fontW, (short)fontH);
...
}
Line 3
抛出System.IO.IOException
和消息The parameter is incorrect.
。我相信Line 9
首先是导致错误的原因。为了简要说明,ConsoleFontSize.SetFontSize()
旨在更改字体的字符大小。我设法使其正常运行,但是当我将FaceName
设置为"Consolas"
时,它工作了一次,但随后开始出现此错误。从那时起,无论我是否注释掉Line 3
或Line 9
,我都没有再次使用它。
public static int SetFontSize(short sizeX, short sizeY) {
IntPtr hConsoleOutput = ConsoleHelper.GetStdHandle(-11);
if (hConsoleOutput == new IntPtr(-1)) {
return Marshal.GetLastWin32Error();
}
ConsoleHelper.CONSOLE_FONT_INFO_EX cfi = new ConsoleHelper.CONSOLE_FONT_INFO_EX();
cfi.cbSize = (uint)Marshal.SizeOf(cfi);
cfi.nFont = 0;
cfi.dwFontSize.X = sizeX;
cfi.dwFontSize.Y = sizeY;
//cfi.FaceName = "Raster";
//cfi.FaceName = "Consolas";
ConsoleHelper.SetCurrentConsoleFontEx(hConsoleOutput, false, ref cfi);
return 0;
}
SetFontSize使用ConsoleHelper,它是“ kernel32.dll”功能的包装:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern Int32 SetCurrentConsoleFontEx(
IntPtr ConsoleOutput,
bool MaximumWindow,
ref CONSOLE_FONT_INFO_EX ConsoleCurrentFontEx);
我知道width或height变量都不在边界之外。我尝试将面部名称更改为其他面部名称(例如Raster
),但无济于事。我正在猜测是否可以弄乱指向Console
的指针,但是可以肯定的是,我在该领域的经验很少。
请评论其他异常详细信息,不确定是否必要。