TypeModule
Object Hierarchy:
Description:
[ CCode ( lower_case_csuffix = "type_module" ,  type_id = "g_type_module_get_type ()" ) ]
public abstract class TypeModule : Object, TypePlugin
  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 class GLib.Object
    All known members inherited from interface GLib.TypePlugin