TypeModule


Object Hierarchy:

GLib.TypeModule GLib.TypeModule GLib.TypeModule GLib.Object GLib.Object GLib.Object->GLib.TypeModule GLib.TypePlugin GLib.TypePlugin GLib.TypePlugin->GLib.TypeModule

Description:

[ CCode ( lower_case_csuffix = "type_module" , type_id = "g_type_module_get_type ()" ) ]
public abstract class TypeModule : Object, TypePlugin

Example: Plugin sample:

Note:

The plugin:

public class MyClass : Object {
static construct {
message("MyClass init");
}

static ~MyClass() {
message("MyClass deinit");
}
}

[ModuleInit]
public static Type plugin_init(GLib.TypeModule type_modul) {
return typeof(MyClass);
}

valac -o libplugin.so --library plugin -X -fPIC -X -shared GLib.TypeModule.0.vala

Note:

Plugin loader:

class MyModule : TypeModule {
[CCode (has_target = false)]
private delegate Type PluginInitFunc (TypeModule module);
private GLib.Module module = null;
private string name = null;

public MyModule (string name) {
this.name = name;
}

public override bool load () {
string path = Module.build_path (null, name);
module = Module.open (path, GLib.ModuleFlags.BIND_LAZY);
if (null == module) {
error ("Module not found");
}

void* plugin_init = null;
if (!module.symbol ("plugin_init", out plugin_init)) {
error ("No such symbol");
}

((PluginInitFunc) plugin_init) (this);

return true;
}

public override void unload () {
module = null;

message ("Library unloaded");
}
}

// Never unref instances of GLib.TypeModule
static TypeModule module = null;

public int main (string[] args) {
module = new MyModule ("plugin");
module.load ();

var o = GLib.Object.new (Type.from_name ("MyClass"));
// free last instance, plugin unload
o = null;
return 0;
}

valac -o loader GLib.TypeModule.1.vala --pkg=gmodule-2.0


Namespace: GLib
Package: gobject-2.0

Content:

Creation methods:

Methods:

Inherited Members:

All known members inherited from interface GLib.TypePlugin