[Mono-list] [Mono-dev] Embedded API: mono_array_element_size issue

jonathan at mugginsoft.com jonathan at mugginsoft.com
Wed Oct 2 13:34:26 UTC 2013


Robert

On 2 Oct 2013, at 14:06, Robert Jordan <robertj at gmx.net> wrote

> Jonathan,
> 
> On 02.10.2013 12:21, jonathan at mugginsoft.com wrote:
>> The following raises so I presume that I have used it incorrectly:
>> 
>>     MonoClass *arrayClass = mono_get_byte_class();
>>     int32_t elementSize = mono_array_element_size(arrayClass);
>> 
>> * Assertion at class.c:8201, condition `ac->rank' not met
>> 
> 
> This is because arrayClass is not the MonoClass of a MonoArray.
> 
> You need something like that:
> 
> // assign the mono array
> uintptr_t byteLength = [self length];
> MonoArray *monoArray = mono_array_new(mono_domain_get(), mono_get_byte_class(), byteLength);
> int32_t elementSize = mono_array_element_size(mono_object_get_class((MonoObject*)monoArray);
> 
Yes. Seems sort of obvious now.

I am vaguely confused by the usage of the MonoClass here and elsewhere.
I have an object, monoArray, yet to query it I require a class reference.
This sort of logic wouldn't generally apply in an OOP environment (certainly not in Obj-C).
Generally, instances have a many to one relationship to their class.

What is the general relationship between a MonoObject and its corresponding MonoClass?
In the above example do all byte arrays share a MonoClass or is the class merely a struct configured for that particular array instance?

Jonathan


More information about the Mono-list mailing list