简单的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 = gcc
CC_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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值