I embedded Mono runtime 3.12 in my QT c++ app on Os x 10.8.5 and try to get
generic class in my c++ app.

Case 1:

c#
namespace TestDictionary
{
    public class Class1
    {
        public Dictionary<string,object> DictionaryField;

        public static void Dump (Dictionary <string, object> dictionary)
        {
            Console.WriteLine("Dump called\n");
        }
        public static void Main()
        {
            Console.WriteLine("Class1 Main called!\n");
        }
    }
}

c++
            MonoClass* classDictionary = NULL;
            classDictionary = mono_class_from_name(image, "TestDictionary",
"Class1");

I compiled TestDictionary.exe and classDictionary is non-NULL.


Case 2:

c#
namespace TestDictionary
{
    public class Class1
    {
        public Dictionary<string,object> DictionaryField;

        public static void Dump (Dictionary <string, object> dictionary)
        {
            Console.WriteLine("Dump called\n");
        }
    }
}

namespace Playstkop.Toolbox
{
        public class ToolboxFacade
        {
              public static void Main()
              {
                  Class1 testClass1 = new Class1();
                  Console.WriteLine("ToolboxFacade Main called!!\n");
              }
        }
}

c++
            MonoClass* classDictionary = NULL;
            classDictionary = mono_class_from_name(image, "TestDictionary",
"Class1");

I compiled TestDictionary.dll and Playstkop.Toolbox.exe. classDictionary
returns NULL. I digged into mono_class_from_name and found that the value of
'name' is 0x0 instead of "Class1".

        Locals          
                assembly_idx    @0xffffffffffffffff     guint32
                buf     " \235§\013\001\000\000\000..." char [1024]
                class   0x0     MonoClass *
                class@1 0x0     MonoClass *
                class@2 @0x10bca9f00    MonoClass
                cols    @0x0    guint32 [5]
                i       @0xffffffffffffffff     int
                idx     @0xffffffffffffffff     guint32
                image   @0x10487fe00    MonoImage
                impl    @0xffffffffffffffff     guint32
                len     @0xffffffffffffffff     int
                loaded_image    0x0     MonoImage *
                module  0x0     MonoImage *
                name       0x0  char *
                name_space      "TestDictionary"        char *
                nested  0x0     char *
                nspace_table    0x0     GHashTable *
                pos     @0xffffffffffffffff     int
                res     @0xffffffffffffffff     gboolean
                t       0x0     MonoTableInfo *
                token   0       guint32

This is the Locals when 'mono_class_from_name' returns: 

        Locals          
                assembly_idx    @0xffffffffffffffff     guint32
                buf     " ݯ\013\001\000\000\000@ú\..." char [1024]
                class   0x0     MonoClass *
                class@1 0x0     MonoClass *
                class@2 0x0     MonoClass *
                cols    @0x0    guint32 [5]
                i       @0xffffffffffffffff     int
                idx     @0xffffffffffffffff     guint32
                image   0x0     MonoImage *
                impl    @0xffffffffffffffff     guint32
                len     @0xffffffffffffffff     int
                loaded_image    0x0     MonoImage *
                module  0x0     MonoImage *
                name    0x0     char *
                name_space      "TestDictionary"        char *
                nested  0x0     char *
                nspace_table    0x0     GHashTable *
                pos     @0xffffffffffffffff     int
                res     @0xffffffffffffffff     gboolean
                t       0x0     MonoTableInfo *
                token   0       guint32

I go back to Case 1 and trace the method 'mono_class_from_name'. The value
of 'name' is also 0x0 (Surprised!).

        Locals          
                assembly_idx    @0xffffffffffffffff     guint32
                buf     " ý§\013\001\000\000@..."       char [1024]
                class   0x0     MonoClass *
                class@1 0x0     MonoClass *
                class@2 @0x10bcaff00    MonoClass
                cols    @0x0    guint32 [5]
                i       @0xffffffffffffffff     int
                idx     @0xffffffffffffffff     guint32
                image   @0x1068a3c00    MonoImage
                impl    @0xffffffffffffffff     guint32
                len     @0xffffffffffffffff     int
                loaded_image    0x0     MonoImage *
                module  0x0     MonoImage *
                name       0x0  char *
                name_space      "TestDictionary"        char *
                nested  0x0     char *
                nspace_table    0x0     GHashTable *
                pos     @0xffffffffffffffff     int
                res     @0xffffffffffffffff     gboolean
                t       0x0     MonoTableInfo *
                token   0       guint32

However, when 'mono_class_from_name' returns, Class1 is returned.

        Locals          
                assembly_idx    @0xffffffffffffffff     guint32
                buf     " \035\227\013\001\000\..."     char [1024]
                class   0x0     MonoClass *
                class@1 0x0     MonoClass *
                class@2 @0x10ac90e10    MonoClass
                        blittable       167774213       guint:1
                        byval_arg       @0x10ac90ed8    MonoType
                        cast_class      @0x10ac90e10    MonoClass
                        contextbound    7408128 guint:1
                        delegate        28938   guint:1
                        element_class   @0x10ac90e10    MonoClass
                        enumtype        167774213       guint:1
                        exception_type  '\0'    guint8
                        ext     0x0     MonoClassExt *
                        field   @0x10ac90e98    _MonoClass::<anonymous struct>
                        fields  @0x10ac92090    MonoClassField
                        fields_inited   113     guint:1
                        flags   1048577 guint32
                        gc_descr        (NSAtom *) gc_descr = 
0x2000000000000001        void *
                        gc_descr_inited 28938   guint:1
                        generic_class   0x0     MonoGenericClass *
                        generic_container       0x0     MonoGenericContainer *
                        ghcimpl 7408128 guint:1
                        has_cctor       28938   guint:1
                        has_finalize    7408128 guint:1
                        has_finalize_inited     113     guint:1
                        has_references  28938   guint:1
                        has_static_refs 28938   guint:1
                        idepth  2       guint16
                        image   @0x1048e0400    MonoImage
                        init_pending    167774213       guint:1
                        inited  167774213       guint:1
                        instance_size   24      int
                        interface_bitmap        '\0'    guint8
                        interface_count 0       guint16
                        interface_id    0       guint16
                        interface_offsets_count 0       guint16
                        interface_offsets_packed        0       guint16
                        interfaces      0x0     MonoClass **
                        interfaces_inited       113     guint:1
                        interfaces_packed       0x0     MonoClass *
                        is_com_object   28938   guint:1
                        is_generic      113     guint:1
                        is_inflated     113     guint:1
                        marshal_info    0x0     MonoMarshalType *
                        marshalbyref    7408128 guint:1
                        max_interface_id        0       guint16
                        method  @0x10ac90ea0    _MonoClass::<anonymous struct>
                                count   3       guint32
                                first   0       guint32
                        methods 0x0     MonoMethod **
                        min_align       '\8'    guint8
                        name      "Class1"      char *
                        name_space      "TestDictionary"        char *
                        nested_classes_inited   28938   guint:1
                        nested_in       0x0     MonoClass *
                        next_class_cache        0x0     MonoClass *
                        no_special_static_fields        28938   guint:1
                        packing_size    7408128 guint:4
                        parent  @0x10ac66280    MonoClass
                        rank    '\0'    guint8
                        ref_info_handle 0       guint32
                        runtime_info    @0x10ac92100    MonoClassRuntimeInfo
                        setup_fields_called     113     guint:1
                        simd_type       113     guint:1
                        size_inited     167774213       guint:1
                        sizes   @0x10ac90e90    _MonoClass::<anonymous union>
                        supertypes      @0x10ac66280    MonoClass
                        this_arg        @0x10ac90ec8    MonoType
                        type_token      33554434        guint32
                        unicode 167774213       guint:1
                        valuetype       167774213       guint:1
                        vtable  @0x1048d7818    MonoMethod
                        vtable_size     4       int
                        wastypebuilder  167774213       guint:1
                cols    @0x0    guint32 [5]
                i       @0xffffffffffffffff     int
                idx     @0xffffffffffffffff     guint32
                image   0x0     MonoImage *
                impl    @0xffffffffffffffff     guint32
                len     @0xffffffffffffffff     int
                loaded_image    0x0     MonoImage *
                module  0x0     MonoImage *
                name    0x0     char *
                name_space      "TestDictionary"        char *
                nested  0x0     char *
                nspace_table    0x0     GHashTable *
                pos     @0xffffffffffffffff     int
                res     @0xffffffffffffffff     gboolean
                t       0x0     MonoTableInfo *
                token   @0xffffffffffffffff     guint32

Here I did something wrong or understood wrong? Any advice helps. Thanks!



--
View this message in context: 
http://mono.1490590.n4.nabble.com/Generic-class-and-mono-class-from-name-tp4665611.html
Sent from the Mono - General mailing list archive at Nabble.com.
_______________________________________________
Mono-list maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to