类
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_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_unuse
将 GTypeModule 的使用计数减少 1。如果结果为 0,则将卸载该模块。(但是,不会释放 GTypeModule 也不会注销与 GTypeModule 关联的类型。一旦对 GTypeModule 进行了初始化,它就必须永久存在)。
从 GTypePlugin 继承的方法 (4)
g_type_plugin_complete_interface_info
从 plugin 的 GTypePluginClass 调用 complete_interface_info 函数。在 GObject 类型系统之外,不需要使用此函数。
g_type_plugin_complete_type_info
从 plugin 的 GTypePluginClass 调用 complete_type_info 函数。在 GObject 类型系统之外,不需要使用此函数。
g_type_plugin_unuse
从 plugin 的 GTypePluginClass 调用 unuse_plugin 函数。在 GObject 类型系统之外,不需要使用此函数。
g_type_plugin_use
从 plugin 的 GTypePluginClass 调用 use_plugin 函数。在 GObject 类型系统之外,不需要使用此函数。
信号
从 GObject 继承的信号 (1)
类结构
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 中的 load 和 unload 函数。
类成员
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 )无相关描述。