本文主要是介绍简单的GObject程序-入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
为了看看GObject的构造析构问题做的一个简单的程序,话不多说:
文件结构:glib_books.h glib_books.c glib_test1.c Makefile
//定义了一个books的类
//glib_books.h
#ifndef _GLIB_BOOKS_H_
#define _GLIB_BOOKS_H_
#include <glib-object.h>
#define M_TYPE_BOOKS (m_books_get_type ())
#define M_BOOKS(object) \
G_TYPE_CHECK_INSTANCE_CAST ((object), M_TYPE_BOOKS, MBooks)
#define M_IS_BOOKS(object) \
G_TYPE_CHECK_INSTANCE_TYPE ((object), M_TYPE_BOOKS))
#define M_BOOKS_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), M_TYPE_BOOKS, MBooksClass))
#define M_IS_BOOKS_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), M_TYPE_BOOKS))
#define M_BOOKS_GET_CLASS(object) \
(G_TYPE_INSTANCE_GET_CLASS ((object), M_TYPE_BOOKS, MBooksClass))
typedef struct _MBooks MBooks;
struct _MBooks {
GObject parent;
};
typedef struct _MBooksClass MBooksClass;
struct _MBooksClass {
GObjectClass parent_class;
};
GType m_books_get_type (void);
#endif
//books的实现
//glib_books.c
/*
* glib_books.c
*
* Created on: Nov 19, 2012
* Author: szhu
*/
#include "glib_books.h"
//G_DEFINE_TYPE (MBooks, m_books, G_TYPE_OBJECT);
static void m_books_dispose(GObject *object);
static void m_books_finalize(GObject *object);
static void m_books_init (MBooks *self);
static void m_books_class_init (MBooksClass *klass);
static gpointer m_books_parent_class = ((void*) 0);
static void m_books_class_intern_init (gpointer klass)
{
m_books_parent_class = g_type_class_peek_parent (klass);
m_books_class_init ((MBooksClass*) klass);
}
GType
m_books_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
GType g_define_type_id =
g_type_register_static_simple (((GType) ((20) << (2))),
g_intern_static_string ("MBooks"),
sizeof (MBooksClass),
(GClassInitFunc) m_books_class_intern_init,
sizeof (MBooks),
(GInstanceInitFunc) m_books_init,
(GTypeFlags) 0);
{ {{};} }
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
static
void m_books_class_init (MBooksClass *klass){
g_printf("%s\n", __FUNCTION__);
// g_type_class_add_private (klass, sizeof (MyFilePrivate));
GObjectClass *base_class = G_OBJECT_CLASS (klass);
base_class->dispose = m_books_dispose;
base_class->finalize = m_books_finalize;
}
static
void m_books_init (MBooks *self){
g_printf("%s\n", __FUNCTION__);
}
static
void m_books_dispose(GObject *object){
g_printf("%s\n", __FUNCTION__);
}
static
void m_books_finalize(GObject *object){
g_printf("%s\n", __FUNCTION__);
}
//glib_test1.c
/*
* glib_test1.c
*
* Created on: Nov 19, 2012
* Author: szhu
*/
#include <glib.h>
#include "glib_books.h"
int main(int argc, char* argv[]){
g_type_init ();
int i;
MBooks* books[10];
int len = sizeof(books) / sizeof(books[0]);
g_printf("len=%d\n", len);
for(i = 0; i < len; i++){
g_printf(" >>construction books[%d]\n", i);
books[i]= g_object_new(M_TYPE_BOOKS, NULL);
}
for(i = 0; i < len; i++){
g_printf(" >>destruction books[%d]\n", i);
g_object_unref(books[i]);
}
return 0;
}
//Makefile
CC = gccCC_OPTS = $(shell pkg-config --cflags gobject-2.0)
CC_OPTS += -std=c99 -g
LD_OPTS = $(shell pkg-config --libs gobject-2.0)
glib_test:glib_test.o glib_books.o
$(CC) -o $@ $+ $(LD_OPTS)
%.o:%.c
$(CC) $(CC_OPTS) -c -o $@ $<
clean:
rm -rf *.o glib_test
这篇关于简单的GObject程序-入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!