Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#到Mono GetConsoleWindow异常_C#_C++_Linux_Bash_Mono - Fatal编程技术网

C#到Mono GetConsoleWindow异常

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

我在将应用程序设置为mono时遇到了一些问题,它给了我一个GetConsoleWindow异常。我以为这会在windows上运行时打开一个新窗口,但在Mono中,在CentOS 6和Gnome上,它给了我一个例外

错误代码:
未处理的异常:
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