我开始在 Mono 框架下为 Linux 编写一个小型应用程序,该应用程序本质上是一个小型信息亭前端,用户交互非常少。这是为了替换 100% 基于文本/控制台的同一应用程序的先前版本。
由于这将在 Raspberry Pi 上运行,我想避免运行 X 并让我的应用程序直接与 Framebuffer 对话。我开始使用 Mono 框架和 C# 作为我的开发语言,因为我非常了解 C#。在这种情况下,可移植性不是问题。
但是,我在找到合适的库和绑定以让我从 Mono 访问帧缓冲区时遇到了一些麻烦。这些GTK#
库都显式绑定到 X11 接口,无论如何,Debian Wheezy 中似乎没有为 ARM Soft-Float (armel) 架构预构建的 GtkFB 库。
该Mono.Cairo
库公开了一个DirectFBSurface
类型,但是该表面的构造函数需要两个IntPtr
参数并且没有记录,因此我不知道应该将什么传递给构造函数以将帧缓冲区正确初始化为开罗表面。
是否有人使用 Mono 和 C# 与 Linux 帧缓冲区通信,如果是,您能否提供基本示例来初始化并开始在 FB 上绘图,或指向在线文档以提供帮助?
更新 1
我想我会尝试null
使用以下代码为两个构造函数参数实例化 DirectFBSurface:
public static void Main(string[] args)
{
// ...
DirectFBSurface surface = new DirectFBSurface(((IntPtr)null), ((IntPtr)null));
// ...
}
我希望这会生成一个异常,表明null
不允许使用参数值,但是它看起来好像 DirectFBSurface 没有在Mono.Cairo
Debian Wheezy (armel) 附带的库中实现或没有编译到库中:
Unhandled Exception: System.EntryPointNotFoundException: cairo_directfb_surface_create
at (wrapper managed-to-native) Cairo.NativeMethods:cairo_directfb_surface_create (intptr,intptr)
at Cairo.DirectFBSurface..ctor (IntPtr dfb, IntPtr dfb_surface) [0x00000] in <filename unknown>:0
at Info.Insch.SandBox.TestCairo.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
因此,该Mono.Cairo
方法似乎无法满足我的需求,并且如上所述,GTK#
Framebuffer 库似乎不是 Debian Wheezy for armel 的一部分。是否有另一组库可用于从 Mono 访问 Linux 帧缓冲区?