在the official website of gobject上,我们可以阅读:
GObject及其低级类型系统GType由GTK +和大多数GNOME库用于提供:
- 面向对象的基于C的API和
- 自动透明API绑定到其他编译或解释 语言
第一部分对我来说很清楚,但不是第二部分。
确实,在谈论gobject和绑定时,引入的概念通常是gobject-intropspection,但据我所知,gobject-introspection可用于为任何记录的C库创建.gir和.typelib,不仅仅是为了基于gobject的库。
因此我想知道是什么让gobject特别具有约束力。
答案 0 :(得分:2)
据我了解,gobject-introspection可用于为任何已记录的C库创建.gir和.typelib,而不仅仅是基于gobject的库。
在实践中并非如此。你可以做一些非常基本的东西,但你必须手工编写GIR(而不是只运行扫描源代码的程序)。我唯一知道的是those distributed with gobject-introspection(* .gir文件,* .c文件是为了避免周期性依赖),甚至那些通常只是C API的一个相当小的子集。 / p>
至于其他功能,GObject几乎所有内容都有帮助......基本思想是绑定通常需要RTTI。有类似GValue
(一个存储值+类型信息的简单框),GClosure
(用于回调),属性和信号用GType
s,等描述自己的类型< / em>的。如果您使用GObjects(而不是创建新的基本类型),您将获得有关继承和接口的运行时数据,而GObject的奇数构造方案甚至允许其他语言子类化C中声明的类型。
{* 1}}在非GObject库上实际上做不了多少的原因是缺少所有这些信息。在扫描源代码寻找注释之后,g-ir-scanner
将实际加载已编译的模块并使用GObject的API来获取此信息(这会使交叉编译变得痛苦)。换句话说,GObject-Introspection是一个比你想象的小得多的项目......它需要的大部分数据来自GObject API。