GObjectTypeModule

描述 [源代码]

abstract class GObject.TypeModule : GObject.Object
  implements GObject.TypePlugin {
  use_count: guint,
  type_infos: GSList*,
  interface_infos: GSList*,
  name: gchar*
}

GTypeModule 提供了 GTypePlugin 接口的简单实现。

GTypeModule 的模型是一个动态加载的模块,其中实现了多个类型和接口实现。

当加载此模块时,它使用 g_type_module_register_type()g_type_module_add_interface() 注册了它的类型和接口。只要这些类型和接口实现的任何实例仍在使用,此模块便会保持加载状态。当所有类型和接口都不再使用时,此模块便会被卸载。如果这些类型和接口再次被使用,此模块便会被重新加载。请注意,最后一个引用不能从模块代码中释放,因为这会导致卸载调用方的代码,然后再向其返回 g_object_unref()

通过使用使用计数来跟踪是否应该加载或不加载此模块,初始值为 0,只要大于 0 便加载此模块。使用计数由类型系统内部维护,但也可以由 g_type_module_use()g_type_module_unuse() 明确控制。通常,在为第一个类型加载模块时,g_type_module_use() 将用于加载它,以便它可以初始化其类型。在稍后的某个时刻,当此模块不再需要被加载时(只保留其包含的类型实现),就会调用 g_type_module_unuse()

GTypeModule 实际上并未提供任何模块加载和卸载的实现。要创建一个特定的模块类型,您必须从 GTypeModule 中派生,并在 GTypeModuleClass 中实现 load 和 unload 函数。

祖先

实现

实例方法

g_type_module_add_interface

为某个类型注册一个其他接口,该接口存在于给定的类型插件中。如果已在此插件中为该类型注册了该接口,则不会执行任何操作。

g_type_module_register_enum

查找或注册一个用特定类型插件实现的枚举。如果之前已注册了类型名为 type_name 的类型,则会返回该类型对应的 GType 标识符,否则会新注册该类型,并返回生成的 GType 标识符。

自:2.6

g_type_module_register_flags

查找或注册使用特定插件类型实现的标记类型。如果之前已注册了具有名称 type_name 的类型,则返回该类型的 GType 标识符,否则会新注册该类型,并返回生成的 GType 标识符。

自:2.6

g_type_module_register_type

查找或注册使用特定插件类型实现的类型。如果之前已注册了具有名称 type_name 的类型,则返回该类型的 GType 标识符,否则会新注册该类型,并返回生成的 GType 标识符。

g_type_module_set_name

GTypeModule 设置名称。

g_type_module_unuse

GTypeModule 的使用计数减少 1。如果结果为 0,则将卸载该模块。(但是,不会释放 GTypeModule 也不会注销与 GTypeModule 关联的类型。一旦对 GTypeModule 进行了初始化,它就必须永久存在)。

g_type_module_use

GTypeModule 的使用计数增加 1。如果在增加之前,使用计数为 0,则将加载该插件。如果加载插件失败,则使用计数将重置为其之前的

GObject 继承的方法 (43)

如需完整的方法列表,请参阅 GObject

GTypePlugin 继承的方法 (4)
g_type_plugin_complete_interface_info

pluginGTypePluginClass 调用 complete_interface_info 函数。在 GObject 类型系统之外,不需要使用此函数。

g_type_plugin_complete_type_info

pluginGTypePluginClass 调用 complete_type_info 函数。在 GObject 类型系统之外,不需要使用此函数。

g_type_plugin_unuse

pluginGTypePluginClass 调用 unuse_plugin 函数。在 GObject 类型系统之外,不需要使用此函数。

g_type_plugin_use

pluginGTypePluginClass 调用 use_plugin 函数。在 GObject 类型系统之外,不需要使用此函数。

信号

GObject 继承的信号 (1)
GObject::notify

当对象的某个属性通过 g_object_set_property()、g_object_set() 等函数设置了值时,会发出此通知信号。

类结构

struct GObjectTypeModuleClass {
  GObjectClass parent_class;
  gboolean (* load) (
    GTypeModule* module
  );
  void (* unload) (
    GTypeModule* module
  );
  void (* reserved1) (
void
  );
  void (* reserved2) (
void
  );
  void (* reserved3) (
void
  );
  void (* reserved4) (
void
  );
  
}

若要实现基于 GTypeModule 的类型的动态加载,则必须实现 GTypeModuleClass 中的 loadunload 函数。

类成员
parent_class: GObjectClass

父类。

load: gboolean (* load) ( GTypeModule* module )

加载模块并使用 g_type_module_register_type() 注册一个或多个类型。

unload: void (* unload) ( GTypeModule* module )

卸载该

reserved1: void (* reserved1) ( void )

无相关描述。

reserved2: void (* reserved2) ( void )

无相关描述。

reserved3: void (* reserved3) ( void )

无相关描述。

reserved4: void (* reserved4) ( void )

无相关描述。

虚拟方法

GObject.TypeModuleClass.load

加载模块并使用 g_type_module_register_type() 注册一个或多个类型。