libgirepository

libgirepository is a C library which provides a C API for accessing the typelib data and for interacting with the corresponding GObject based libraries.

For more information about libgirepository see the API documentation.

The following example shows how to call the g_assertion_message() function from libglib-2.0:

#include <girepository.h>

int
main (void)
{
  GIRepository *repository;
  GError *error = NULL;
  GIBaseInfo *base_info;
  GIArgument in_args[5];
  GIArgument retval;

  repository = g_irepository_get_default ();
  g_irepository_require (repository, "GLib", "2.0", 0, &error);
  if (error)
    {
      g_error ("ERROR: %s\n", error->message);
      return 1;
    }

  base_info = g_irepository_find_by_name (repository, "GLib", "assertion_message");
  if (!base_info)
    {
      g_error ("ERROR: %s\n", "Could not find GLib.assertion_message");
      return 1;
    }

  in_args[0].v_pointer = (gpointer)"domain";
  in_args[1].v_pointer = (gpointer)"glib-print.c";
  in_args[2].v_int = 42;
  in_args[3].v_pointer = (gpointer)"main";
  in_args[4].v_pointer = (gpointer)"hello world";

  if (!g_function_info_invoke ((GIFunctionInfo *) base_info,
                               (const GIArgument *) &in_args,
                               5,
                               NULL,
                               0,
                               &retval,
                               &error))
    {
      g_error ("ERROR: %s\n", error->message);
      return 1;
    }

  g_base_info_unref (base_info);

  return 0;
}