从MONO获取基于模板的类词典?

时间:2013-08-31 16:07:16

标签: c# c++ mono

如果我得到类似System.String的经典类型,那就没问题了。

clsString = mono_class_from_name(image_mscorlib, "System", "String");

但是当我尝试像Dictionary这样的基于模板的类时,它会失败:

clsDictionary2 = mono_class_from_name(image_mscorlib, "System.Collections.Generic", "Dictionary"); NULL!!
clsDictionary3 = mono_class_from_name(image_mscorlib, "System.Collections.Generic", "Dictionary<TKey,TValue>"); also NULL

如何使用C ++单声道包装器代码获取Mono Dictionary类。我查看了MONO库,发现里面有Dictionary'2类型,我可以得到它:

clsDictionary1 = mono_class_from_name(image_mscorlib, "System.Collections.Generic", "Dictionary`2"); not NULL, pointer

但是如何实例化Dictionary(int, int)Dictionary(object, object)?我应该挖掘Dictionary'2IDictionary(??)并寻找相应的.ctor(int, int)(object, object)是否正确?


对于那些对这个问题也感兴趣的人来说只是一个简短的更新(obj_Instance - 一个指向某个.NET对象的指针,它封装了PFILED成员obj - Dictionary&lt;,&gt; ptr_DictObj):

ptr_DictObj = mono_field_get_value_object(pDomain, pfield, obj_Instance); 
char* cls = (char*)mono_object_get_class((void*)ptr_DictObj); 
char* name1 = (char*)((char*)cls + 0x30); 
char* namesp1 = (char*)((char*)cls + 0x34); 
Log("name1=", name1); 
Log("namespace1=", namesp1); 

答案是name1=Dictionary'2, namespace1=System.Collections.Generic

所以它真的是Dictionary'2类,但我仍然无法将ptr_DictObj投射到System.Collections.Generic.Dictionary'2mono_object_castclass_mbyref突然崩溃导致我所有的梦想继续下去=)))

void* obj_Dictionary = mono_object_castclass_mbyref(ptr_DictObj, clsDictionary);

刚刚找到了崩溃的原因。

clsDictionary = mono_class_from_name(mono_get_corlib(), "System.Collections.Generic", "Dictionary`2");

clsDictionary与运行时获得的“cls”不同。当我尝试将ptr_DictObj转换为clsDictionary时,它失败了,但是成功进行了“cls”类型转换。

0 个答案:

没有答案