static void iface_print_string (TestIface *tiobj, const gchar *string) { TestIfaceClass *iface; g_return_if_fail (TEST_IS_IFACE (tiobj)); g_return_if_fail (G_IS_OBJECT (tiobj)); /* ensured through prerequisite */ iface = TEST_IFACE_GET_CLASS (tiobj); g_object_ref (tiobj); iface->print_string (tiobj, string); g_object_unref (tiobj); }
int main( int argc, char **argv ) { TestBase *base, *base2; TestDerived *derived; #if !GLIB_CHECK_VERSION( 2,36, 0 ) g_type_init(); #endif g_debug( "allocating TestBase -------------------------------------" ); base = test_base_new(); g_debug( "calling test_iface_fna on Base object -------------------" ); test_iface_fna( TEST_IFACE( base )); g_debug( "calling test_iface_fnb on Base object -------------------" ); test_iface_fnb( TEST_IFACE( base )); g_debug( "allocating TestDerived ----------------------------------" ); derived = test_derived_new(); if( TEST_IS_IFACE( derived )){ g_debug( "Derived is also an IFace" ); } else { g_debug( "Derived is NOT an IFace" ); } g_debug( "calling test_iface_fna on Derived object ----------------" ); test_iface_fna( TEST_IFACE( derived )); g_debug( "calling test_iface_fnb on Derived object ----------------" ); test_iface_fnb( TEST_IFACE( derived )); g_debug( "allocating TestBase -------------------------------------" ); base2 = test_base_new(); g_debug( "calling test_iface_fna on another Base object -------------------" ); test_iface_fna( TEST_IFACE( base2 )); g_debug( "calling test_iface_fnb on another Base object -------------------" ); test_iface_fnb( TEST_IFACE( base2 )); g_debug( "unreffing TestDerived ------------------------------------" ); g_object_unref( derived ); g_debug( "unreffing TestBase ------------------------------------" ); g_object_unref( base ); g_debug( "end -----------------------------------------------------" ); return( 0 ); }