From c441dca3db3d3425e47fa182cc443bc9c3a72217 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 11 Jun 2004 01:31:02 +0000 Subject: [PATCH] Add an example for GModule usage. (#144127, Tommi Komulainen) Thu Jun 10 21:29:55 2004 Matthias Clasen * glib/tmpl/modules.sgml: Add an example for GModule usage. (#144127, Tommi Komulainen) --- docs/reference/ChangeLog | 5 ++++ docs/reference/glib/tmpl/modules.sgml | 42 +++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/docs/reference/ChangeLog b/docs/reference/ChangeLog index b45bc5768..f3ef0a73d 100644 --- a/docs/reference/ChangeLog +++ b/docs/reference/ChangeLog @@ -1,3 +1,8 @@ +Thu Jun 10 21:29:55 2004 Matthias Clasen + + * glib/tmpl/modules.sgml: Add an example for GModule + usage. (#144127, Tommi Komulainen) + Sun Jun 6 23:20:42 2004 Matthias Clasen * gobject/tmpl/gtype.sgml: Fix the docs for G_DEFINE_TYPE() diff --git a/docs/reference/glib/tmpl/modules.sgml b/docs/reference/glib/tmpl/modules.sgml index 58d6de334..db2e00070 100644 --- a/docs/reference/glib/tmpl/modules.sgml +++ b/docs/reference/glib/tmpl/modules.sgml @@ -41,6 +41,48 @@ program, e.g. through calling g_quark_from_static_string ("my-module-st it must ensure that it is never unloaded, by calling g_module_make_resident(). + + +Calling a function defined in a <structname>GModule</structname> + +/* the function signature for 'say_hello' */ +typedef void (* SayHelloFunc) (const char *message); + +gboolean +just_say_hello (const char *filename, GError **error) +{ + SayHelloFunc say_hello; + GModule *module; + + module = g_module_open (filename, G_MODULE_BIND_LAZY); + if (!module) + { + g_set_error (error, FOO_ERROR, FOO_ERROR_BLAH, + "%s", g_module_error ()); + return FALSE; + } + + if (!g_module_symbol (module, "say_hello", (gpointer *)&say_hello)) + { + g_set_error (error, SAY_ERROR, SAY_ERROR_OPEN, + "%s: %s", filename, g_module_error ()); + if (!g_module_close (module)) + g_warning ("%s: %s", filename, g_module_error ()); + return FALSE; + } + + /* call our function in the module */ + say_hello ("Hello world!"); + + if (!g_module_close (module)) + g_warning ("%s: %s", filename, g_module_error ()); + + return TRUE; +} + + + +