类
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 )
无相关描述。