结构
gioIOExtensionPoint
描述 [src]
struct GIOExtensionPoint {
/* No available fields */
}
GIOExtensionPoint
提供了一种机制,使得模块能够按照一种组织方式扩展已加载库或应用程序的功能。
扩展点通过名称进行标识,并且它可以选择性地要求任何实现必须是某种类型(或该类型的派生类型)。使用 g_io_extension_point_register()
注册扩展点,并使用 g_io_extension_point_set_required_type()
设置所需类型。
模块可以通过指定实现功能的 GType
来实现扩展点。此外,扩展点的每个实现都有一个名称和优先级。使用 g_io_extension_point_implement()
实现扩展点。
GIOExtensionPoint *ep;
// Register an extension point
ep = g_io_extension_point_register ("my-extension-point");
g_io_extension_point_set_required_type (ep, MY_TYPE_EXAMPLE);
// Implement an extension point
G_DEFINE_TYPE (MyExampleImpl, my_example_impl, MY_TYPE_EXAMPLE)
g_io_extension_point_implement ("my-extension-point",
my_example_impl_get_type (),
"my-example",
10);
至于注册扩展点的代码如何使用与其相关联的实现,这取决于使用案例。它可能使用所有实现,或者仅使用优先级最高的一个,或者通过名称选择特定的一个。
为了避免为了找出模块实现了哪些扩展点而打开所有模块,GIO 使用了一种缓存机制,请参阅 gio-querymodules。你们需要在安装 GIO 模块后运行此命令。
可以通过 GIO_EXTRA_MODULES
环境变量来指定要自动从其中加载模块的附加目录。此环境变量的语法与 PATH
相同。如果在不同的目录中存在两个具有相同基本名称的模块,则后者将被忽略。如果指定了附加目录,GIO 将在最后从内置目录中加载模块。