(GObjectIntrospection)尝试使用javascript创建ibus引擎时出现分段错误
(GObjectIntrospection) Segmentation fault when trying to create ibus engine using javascript
GObjectIntrospection允许在任何高级语言中使用C对象。https://live.gnome.org/GObjectIntrospection
IBus是linux的一个输入法框架。code.google.com/p/ibus
我在使用GObjectIntrospection/javascript时遇到了一些麻烦。我试过了创建ibus引擎。同样的代码适用于vala、python。但在javascript seg错误。我使用的是opensuse 12.1 gnome3。"ibus-devel"包提供了GObjectIntrospection所需的/usr/share/gir-1.0/ibus-1.0.gir。
我正在运行以下代码。
#!/usr/bin/env gjs
const IBus = imports.gi.IBus;
//get the ibus bus
var bus = new IBus.Bus();
if(bus.is_connected()){
var factory = new IBus.Factory({
connection: bus.get_connection()
});
factory.add_engine({
engine_name:"ibus-sarim",
engine_type:typeof(this)
});
}
它在"新IBus.Factory"的6号线上崩溃。
终端输出,
(gjs:13353): GLib-GIO-CRITICAL **: g_dbus_connection_register_object:
assertion `object_path != NULL && g_variant_is_object_path
(object_path)' failed
Segmentation fault
我不知道问题出在哪里。我试过vala测试代码在https://github.com/ibus/ibus/blob/master/bindings/vala/test/enchant.vala它编译和运行良好。在附魔.vala第148行中,
var factory = new Factory(bus.get_connection());
创建Factory的代码与我在javascript中尝试的代码相同。也在python、中
from gi.repository import IBus
from gi.repository import GLib
from gi.repository import GObject
IBus.init()
bus = IBus.Bus()
if bus.is_connected():
factory = IBus.Factory.new(bus.get_connection())
这似乎也很好,没有seg故障。但在javascript中,它每次都会失败。知道吗?我已经讨论了几天了,但没有任何效果:(
在IBusFactory中:
"connection" IBusConnection* : Read / Write / Construct Only
文件上写着"Construct Only"
。这一点目前有待解释,但对我来说,这意味着它可能是一个私人或受保护的阶级成员。也就是说,构造函数被定义为:
IBusFactory * ibus_factory_new (IBusConnection *connection);
构造函数中有一个连接变量。请注意,当你以这种方式提供时,你的应用程序运行良好。
const IBus = imports.gi.IBus;
//get the ibus bus
var bus = new IBus.Bus();
if(bus.is_connected()){
var factory = new IBus.Factory(bus.get_connection());
}
现在对于factory.add_engine()
,定义如下:
void ibus_factory_add_engine (IBusFactory *factory,
const gchar *engine_name,
GType engine_type);
这意味着您必须提供engine_name
和engine_type
作为函数参数。这项工作:
factory.add_engine('ibus-engine-name', some-engine-type);
请参阅http://ibus.googlecode.com/svn/docs/ibus/ch03.html发动机创意。这段代码不会出错,但也不起作用。它指示直到add_engine()
的第二个参数为止的正确语法。
#!/usr/bin/env gjs
const IBus = imports.gi.IBus;
//get the ibus bus
var bus = new IBus.Bus();
if(bus.is_connected()){
var factory = new IBus.Factory(bus.get_connection());
factory.add_engine("ibus-sarim", typeof(this));
}
- 表达式引擎扩展开发-向呈现的条目添加自定义javascript
- 谷歌文档表面引擎
- 自定义运行时Can'在谷歌应用引擎中看不到我的自定义日志
- 从js引擎的角度来看闭包和构造函数是如何工作的
- Javascript-模板引擎
- 如何使用jQuery验证引擎验证组
- javascript中的表达式引擎字段
- 布局引擎和javascript引擎之间的区别
- 使用Node.js在应用程序引擎上进行本地单元测试
- 扩展Nashorn-ecma引擎以添加新的运算符和类型
- Javascript图形布局引擎
- 自定义警报/弹出窗口和保持JS引擎
- 你知道使用javascript游戏引擎的简单方法吗
- JavaScript游戏引擎——编辑器中的代码运行:)检查器中的错误
- 在谷歌应用引擎上用jQuery处理json表单
- AngularJS模板引擎的替代方案
- Rails引擎:使主机应用程序javascript可用于Mounted Engine
- 余烬引擎未捕获错误:找不到模块余烬视图/views/select
- Node中的基本html引擎
- (GObjectIntrospection)尝试使用javascript创建ibus引擎时出现分段错误