Kouhei Sutou
kou****@cozmi*****
2006年 1月 22日 (日) 14:18:29 JST
須藤です. 普通のGObjectではない構造体をGBoxedでGType化するための便利マ クロKZ_BOXED_GET_TYPEを追加しました. それでは早速使いかたをみていきましょう. 用意するものはこちらになります. * 構造体: これはGObject parent;とかがない普通のもので結構 です.手元にある適当な構造体で代用できるのでちゃ ちゃっと作れて便利ですね. * コピー関数: 引数としてコピー元構造体を受け取って,コピー した構造体を返します.g_new0()して値を設定し ていくという簡単なもので構いません. * フリー関数: 引数として与えられた構造体を開放する関数です ね.何も返さなくてもよいです.単純なものなら g_freeで代用しちゃっても良いですよ. ここでは, 構造体をSampleStruct, コピー関数をsample_struct_copy, フリー関数をsample_struct_free, とします. えーと,それでは,そろそろ作業に入りましょうね. まず,あらかじめ用意してある(だろう)ヘッダファイル sample-struct.hに以下を追加します. #define TYPE_SAMPE_STRUCT (sample_struct_get_type ()) ... GType sample_struct_get_type(void) G_GNUC_CONST; ... /* コピー関数とかフリー関数があるはず */ SampleStruct *sample_struct_copy (SampleStruct *struct); void sample_struct_free (SampleStruct *struct); ... 簡単ですね. 次に,ソースファイルsample-struct.cに以下を追加します. #include "gobject-utils.h" KZ_BOXED_GET_TYPE(sample_struct, "SampleStruct", sample_struct_copy, sample_struct_free) はい,これだけです. これなら5分もかからずにできちゃいますね. 具体的な例はテキストsrc/kz-embed-event.{c,h}に載っています. 参考にしてくださいね. それでは.