Results 1 to 1 of 1
I Want to Register Type in Glib, I've written simple code just copied it from docs:
#include <glib.h>
#include <glib-object.h>
#define MAMAN_TYPE_BAR (maman_bar_get_type ())
#define MAMAN_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAMAN_TYPE_BAR, MamanBar))
...
- 05-07-2007 #1Just Joined!
- Join Date
- May 2007
- Posts
- 1
Cant register type in GLib
I Want to Register Type in Glib, I've written simple code just copied it from docs:
#include <glib.h>
#include <glib-object.h>
#define MAMAN_TYPE_BAR (maman_bar_get_type ())
#define MAMAN_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAMAN_TYPE_BAR, MamanBar))
#define MAMAN_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MAMAN_TYPE_BAR, MamanBarClass))
#define MAMAN_IS_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MAMAN_TYPE_BAR))
#define MAMAN_IS_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MAMAN_TYPE_BAR))
#define MAMAN_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MAMAN_TYPE_BAR, MamanBarClass))
typedef struct _MamanBar MamanBar;
typedef struct _MamanBarClass MamanBarClass;
struct _MamanBar {
GObject parent;
/* instance members */
};
struct _MamanBarClass {
GObjectClass parent;
/* class members */
};
/* used by MAMAN_TYPE_BAR */
GType maman_bar_get_type (void);
static GObject *
maman_bar_constructor (GType type,
guint n_construct_properties,
GObjectConstructParam *construct_properties)
{
GObject *obj;
{
/* Invoke parent constructor. */
MamanBarClass *klass;
GObjectClass *parent_class;
klass = MAMAN_BAR_CLASS (g_type_class_peek (MAMAN_TYPE_BAR));
parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
obj = parent_class->constructor (type,
n_construct_properties,
construct_properties);
}
/* do stuff. */
return obj;
}
static void
maman_bar_instance_init (GTypeInstance *instance,
gpointer g_class)
{
MamanBar *self = (MamanBar *)instance;
/* do stuff */
}
static void
maman_bar_class_init (gpointer g_class,
gpointer g_class_data)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (g_class);
MamanBarClass *klass = MAMAN_BAR_CLASS (g_class);
gobject_class->constructor = maman_bar_constructor;
}
GType maman_bar_get_type (void)
{
static GType type = 0;
if (type == 0) {
static const GTypeInfo info = {
sizeof (MamanBarClass),
NULL, /* base_init */
NULL, /* base_finalize */
maman_bar_class_init, /* class_init */
NULL, /* class_finalize */
NULL, /* class_data */
sizeof (MamanBar),
0, /* n_preallocs */
maman_bar_instance_init /* instance_init */
};
type = g_type_register_static (G_TYPE_OBJECT,
"MamanBarType",
&info, 0);
}
return type;
}
int main() {
MamanBar *bar = g_object_new (MAMAN_TYPE_BAR, NULL);
return 0;
}
The MakeFile is:
objin:objin.o
cc -Wall -g -o objin objin.o -lgobject-2.0 -lglib-2.0 -lm
-lpthread -ldl -lstdc++
objin.o:objin.c
cc -c -g -D_DEBUG -Wall -DLINUX -D_REENTRANT -I/root/my_dir/glib-2.10.0/glib -I/root/my_dir/glib-2.10.0 objin.c -o objin.o
And after running it I get an error:
(process:14356): GLib-GObject-CRITICAL **: gtype.c:2215: initialization
assertion failed, use IA__g_type_init() prior to this function
So the type is not registered, and by the way programm is not hang, just type is still equal to 0 after registering.
Please, can anyone halp me with it??
PS : I use Suse 10.2 & Glib 2.10.0


Reply With Quote