我想使用Vala破解现有的基于GLib的C项目.
基本上我正在做的是,在我的构建过程开始时,使用valac从我的.vala文件生成.c和.h文件,然后按照我任何.c或.h文件的方式编译生成的文件.
这可能不是最好的方式,但似乎在大多数情况下工作正常.
我的问题是我很难从Vala代码访问现有的C代码.是否有捷径可寻?
我已经尝试编写自己的.vapi文件(我对vala附带的工具没有任何好运),但我找不到任何关于如何编写这些文件的体面文档.
有没有?我是否需要其中一个文件来调用现有的C代码?
我正在尝试创建一个Vala项目,看看我喜欢使用该语言进行开发,以此作为Mono的替代品.我认为automake的东西可以用来生成一个包含所有必要文件的项目模板(没有我的.vala代码).任何帮助,将不胜感激.
我一直在用Java开发图像处理应用程序,但我最近对VALA感兴趣.原因是因为我相信我可以提高应用程序性能(我主要关注的是与C/C++库的互连,因为看起来< Example >在Java中使用C/C++桥时存在性能损失).
背景(我所知道):
有一些事情在我脑海里蔓延,我无法找到答案:
任何见解?
使用cast to int而不是Math.floor将float/double值转换为整数是否节省?
var scale = 1.5;
int foo1 = (int)scale;
int foo2 = Math.floor(scale);
Run Code Online (Sandbox Code Playgroud) 我正在使用一些遗留的C代码,我需要重构和清理,删除意大利面条型编程,遵守DRY原则等.
我正在考虑使用C++进行重写,但我不想走得那么远,并希望尽可能保持与C的接近(同时使用一些OOP概念[无需手动编写代码]).
我最近遇到了GObject,Vala和Genie.后两者是最近的.是否有人知道在生产代码中使用Vala或Genie?
最后但并非最不重要 - 是否有两种语言之间的利弊比较列表.我倾向于Genie,因为我喜欢Python而且我对C#并不太热衷,但Genie(显而易见的)对标签的坚持可能在实践中有点烦人 - 我会对一系列的利弊感兴趣两种语言(假设其中一种或两种语言可供生产使用).
顺便说一句,我正在开发Linux,所以任何与Windows相关的问题都与我无关.
我是Vala编程的新手,拥有Java和.NET的经验,但我还没有找到有关如何使用Vala进行日志记录的任何有用的东西.是否有任何有用的日志记录工具,如log4j或log4net,或者建议的方式登录Vala并扩展到几个日志级别,如错误,警告,调试和跟踪?那么像断言和合同那样的防御性编程呢?是否有任何建议的方法来进行防御性编程并获得具有堆栈跟踪和精确根本原因的最有用日志?谢谢你的建议.
我试图保持gtk.window在顶部,但我遇到了麻烦.
到目前为止,这是我的代码.这个例子是在vala gnome中(在Windows 7上).
public void onTop() {
window.decorated = false;
window.modal = true;
window.set_keep_above(true);
}
Run Code Online (Sandbox Code Playgroud) 将多个键盘快捷键绑定到GTK + 3中的一个动作的最佳方法是什么?
几天来,我一直在寻找这个问题的答案,并且一无所获.该函数gtk_accelerator_parse不支持逗号分隔的快捷方式.将多个<accelerator>标记放在.ui具有相同action属性和不同key属性的文件中也不起作用.
我不想写一个自定义按键处理程序,所以我可以有一个动作的两个快捷方式,但这真的是唯一的方法吗?
我正在尝试使用glade/gtk/vala创建一个简单的应用程序.到目前为止我有这个:
using Gtk;
class HelloWorldApp : GLib.Object {
const string UI = "test.glade";
public Window main_window;
[CCode (instance_pos = -1)]
public void on_btn_hello_clicked(Button source) {
stdout.printf("Hello, world");
}
construct {
Builder builder = new Builder();
builder.add_from_file(UI);
main_window = builder.get_object("window1") as Window;
main_window.destroy.connect(Gtk.main_quit);
builder.connect_signals(this);
}
}
class HelloWorld : GLib.Object {
public static int main(string[] args) {
Gtk.init (ref args);
HelloWorldApp h = new HelloWorldApp();
h.main_window.show_all();
Gtk.main();
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时输出:(helloworld:22641):Gtk-WARNING**:无法找到信号处理程序'on_btn_hello_clicked'但是除了未被调用的处理程序之外还运行良好
我究竟做错了什么?