C#到Mono GetConsoleWindow异常
我在将应用程序设置为mono时遇到了一些问题,它给了我一个GetConsoleWindow异常。我以为这会在windows上运行时打开一个新窗口,但在Mono中,在CentOS 6和Gnome上,它给了我一个例外 错误代码:C#到Mono GetConsoleWindow异常,c#,c++,linux,bash,mono,C#,C++,Linux,Bash,Mono,我在将应用程序设置为mono时遇到了一些问题,它给了我一个GetConsoleWindow异常。我以为这会在windows上运行时打开一个新窗口,但在Mono中,在CentOS 6和Gnome上,它给了我一个例外 错误代码: 未处理的异常: System.EntryPointNotFoundException:GetConsoleWindow 位于(包装器管理为本机)Silverwave.Program:GetConsoleWindow() 在Silverwave.Program.Main(Sy
未处理的异常:
System.EntryPointNotFoundException:GetConsoleWindow
位于(包装器管理为本机)Silverwave.Program:GetConsoleWindow()
在Silverwave.Program.Main(System.String[]Args)[0x00000]中:0
[错误]致命的未处理异常:System.EntryPointNotFoundException:GetConsole eWindow
位于(包装器管理为本机)Silverwave.Program:GetConsoleWindow()
在Silverwave.Program.Main(System.String[]Args)[0x00000]中:0
[root@h2297404调试]#未处理的异常:
-bash:未处理:opdracht niet gevonden
[root@h2297404调试]#System.EntryPointNotFoundException:GetConsoleWindow
-bash:System.EntryPointNotFoundException::opdracht niet gevonden
提前感谢控制台窗口是特定于windows系统的(这就是为什么.NET本身不存在,您必须p/调用它)
Linux系统不公开此API,因此您无法在Linux上调用它,并且没有替代程序。简短回答-使用Console.WindowWidth 长答覆: $COLUMNS就是这样一个变量。 还有stty-a或更具体的stty尺寸 stty使用
get_terminal_width_height(STDIN_FILENO, &width, &height)
这反过来又叫
ioctl(fd, TIOCGWINSZ, &winsize);
TIOCGWINSZ
用屏幕宽度和高度填充第三个参数指向的winsize结构。
winsize结构在'sys/ioctl.h'中定义如下:
struct winsize
{
unsigned short ws_row; /* rows, in characters */
unsigned short ws_col; /* columns, in characters */
unsigned short ws_xpixel; /* horizontal size, pixels */
unsigned short ws_ypixel; /* vertical size, pixels */
};
在这里它被称为单声道
导出为“TtySetup”
在这里被导入到C#代码中
这里叫-
不安全的void checkWindow维度()
这可通过属性WindowWidth获得:
namespace System {
class TermInfoDriver : IConsoleDriver {
public int WindowWidth {
界面二十面体驱动
最终,它应该可以通过
我检查过了,这是有效的(至少从mono 4.0.2.5开始)
@用户,这取决于您使用该函数的目的*NIX TTY不是Windows控制台,因此您可能必须修改该代码,或者可能在*NIX平台上禁用它。@用户,恐怕我不能用一种更简单的方式来解释:您所说的“C#emulator”程序调用了*NIX平台上不存在的API函数。函数背后的概念也不存在。如果你不能修改那个程序的代码,你就是索尔。@FrédéricHamidi如果你能编辑源代码呢?
namespace System {
class TermInfoDriver : IConsoleDriver {
public int WindowWidth {
using System;
class mainclass {
public static int Main(string[] args) {
Console.WriteLine(Console.WindowWidth);
return 0; } }
sabayon aa $ mcs test.cs -r:System.dll
sabayon aa $ mono test.exe
239