### Function Macro

# GObject DEFINE_DYNAMIC_TYPE_EXTENDED

since: 2.14

#### Declaration

    #define G_DEFINE_DYNAMIC_TYPE_EXTENDED (
      TypeName,
      type_name,
      TYPE_PARENT,
      flags,
      CODE
    )

#### Description

A more general version of G_DEFINE_DYNAMIC_TYPE() which allows to specify `GTypeFlags` and custom code.

    G_DEFINE_DYNAMIC_TYPE_EXTENDED (GtkGadget,
                                    gtk_gadget,
                                    GTK_TYPE_THING,
                                    0,
                                    G_IMPLEMENT_INTERFACE_DYNAMIC (TYPE_GIZMO,
                                                                   gtk_gadget_gizmo_init));

expands to

    static void     gtk_gadget_init              (GtkGadget      *self);
    static void     gtk_gadget_class_init        (GtkGadgetClass *klass);
    static void     gtk_gadget_class_finalize    (GtkGadgetClass *klass);

    static gpointer gtk_gadget_parent_class = NULL;
    static GType    gtk_gadget_type_id = 0;

    static void     gtk_gadget_class_intern_init (gpointer klass)
    {
      gtk_gadget_parent_class = g_type_class_peek_parent (klass);
      gtk_gadget_class_init ((GtkGadgetClass*) klass);
    }

    GType
    gtk_gadget_get_type (void)
    {
      return gtk_gadget_type_id;
    }

    static void
    gtk_gadget_register_type (GTypeModule *type_module)
    {
      const GTypeInfo g_define_type_info = {
        sizeof (GtkGadgetClass),
        (GBaseInitFunc) NULL,
        (GBaseFinalizeFunc) NULL,
        (GClassInitFunc) gtk_gadget_class_intern_init,
        (GClassFinalizeFunc) gtk_gadget_class_finalize,
        NULL,   // class_data
        sizeof (GtkGadget),
        0,      // n_preallocs
        (GInstanceInitFunc) gtk_gadget_init,
        NULL    // value_table
      };
      gtk_gadget_type_id = g_type_module_register_type (type_module,
                                                        GTK_TYPE_THING,
                                                        "GtkGadget",
                                                        &g_define_type_info,
                                                        (GTypeFlags) flags);
      {
        const GInterfaceInfo g_implement_interface_info = {
          (GInterfaceInitFunc) gtk_gadget_gizmo_init
        };
        g_type_module_add_interface (type_module, g_define_type_id, TYPE_GIZMO, &g_implement_interface_info);
      }
    }

Available since: 2.14

This function is not directly available to language bindings.

#### Parameters

`TypeName`

  Type: `-`

  The name of the new type, in Camel case.

`type_name`

  Type: `-`

  The name of the new type, in lowercase, with words separated by ‘_’.

`TYPE_PARENT`

  Type: `-`

  The `GType` of the parent type.

`flags`

  Type: `-`

  `GTypeFlags` to pass to `g_type_module_register_type()`

`CODE`

  Type: `-`

  Custom code that gets inserted in the *_get_type() function.