[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