G_TYPE für eigene Klasse

Antworten
Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

G_TYPE für eigene Klasse

Beitrag von Targion »

Hallo!
Ich habe hier folgendes GLib-C-Code-Fragment:

Code: Alles auswählen

typedef struct SomeObject SomeObject;
typedef struct SomeObjectClass SomeObjectClass;
 
GType some_object_get_type (void);
 
struct SomeObject
{
  GObject parent;
};
 
struct SomeObjectClass
{
  GObjectClass parent;
};
 
#define SOME_TYPE_OBJECT              (some_object_get_type ())
#define SOME_OBJECT(object)           (G_TYPE_CHECK_INSTANCE_CAST
((object), SOME_TYPE_OBJECT, SomeObject))
#define SOME_OBJECT_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass),
SOME_TYPE_OBJECT, SomeObjectClass))
#define SOME_IS_OBJECT(object)        (G_TYPE_CHECK_INSTANCE_TYPE
((object), SOME_TYPE_OBJECT))
#define SOME_IS_OBJECT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass),
SOME_TYPE_OBJECT))
#define SOME_OBJECT_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj),
SOME_TYPE_OBJECT, SomeObjectClass))
 
G_DEFINE_TYPE(SomeObject, some_object, G_TYPE_OBJECT)
 
gboolean some_object_hello_world (SomeObject *obj, const char
*hello_message, char ***ret, GError **error);

Wie kann ich jetzt einen eigenen G_TYPE für die Klasse "SomeObject", die ich nach Pascal übersetzt habe, erstellen?
Die funktion GType some_object_get_type (void); hängt ja komplett in der Luft. Was liefert die? Einen Zufallswert, weil sie nirgendwo implementiert und aus keiner lib importiert wird?
G_DEFINE_TYPE ist eine Kurzfassung von folgender Deklaration:

Code: Alles auswählen

#define G_DEFINE_TYPE_EXTENDED(TN, t_n, T_P, _f_, _C_)       _G_DEFINE_TYPE_EXTENDED_BEGIN (TN, t_n, T_P, _f_) {_C_;} _G_DEFINE_TYPE_EXTENDED_END()

Ich verstehe das irgendwie nicht ganz... Kennt sich zufällig wer mit GLib-Programmierung aus?

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: G_TYPE für eigene Klasse

Beitrag von Targion »

:o Nach Lesen von 10 Seiten GLib-dokumentation und einiges an C-Code habe ich glaube ich die Lösung gefunden. Muss nurnoch getestet werden.

Antworten