Embedded API: thunk value type parameters and return types
Jonathan Mitchell <[email protected]> Thu, 22 Sep 2016 21:22:08 +0100
| Newsgroups | gmane.comp.gnome.mono.general |
|---|---|
| Message-ID | <[email protected]> |
I am trying to upgrade some method invoke based code to used thunks.
The comments for mono_method_get_unmanaged_thunk() say:
* LIMITATIONS
*
* Value type arguments and return values are treated as they were objects:
*
* C#: public static Rectangle Intersect (Rectangle a, Rectangle b);
* C: typedef MonoObject* (*Intersect)(MonoObject*, MonoObject*, MonoException**);
*
* Arguments must be properly boxed upon trunk's invocation, while return
* values must be unboxed.
However it seems that primitive value types are returned unboxed while non primitive value types are not.
Does the same apply for thunk parameters?
Are primitive value parameters based by value and non primitive value parameters as a boxed reference?
// Obj-C
// non primitive value type
- (NSDate *)date
{
typedef MonoObject* (*Thunk)(MonoObject *, MonoObject**);
static Thunk thunk;
MonoObject *monoException = NULL;
if (!thunk) {
MonoMethod *monoMethod = GetPropertyGetMethod(self.monoClass, "Date");
thunk = (Thunk)mono_method_get_unmanaged_thunk(monoMethod);
}
MonoObject *monoObject = thunk(self.monoObject, &monoException);
if (monoException != NULL) @throw(NSExceptionFromMonoException(monoException, @{}));
if ([self object:_date isEqualToMonoObject:monoObject]) return _date;
_date = [NSDate dateWithMonoDateTime:monoObject];
return _date;
}
// primitive value type
- (int64_t)int64Number
{
typedef int64_t (*Thunk)(MonoObject *, MonoObject**);
static Thunk thunk;
MonoObject *monoException = NULL;
if (!thunk) {
MonoMethod *monoMethod = GetPropertyGetMethod(self.monoClass, "Int64Number");
thunk = (Thunk)mono_method_get_unmanaged_thunk(monoMethod);
}
_int64Number = thunk(self.monoObject, &monoException);
if (monoException != NULL) @throw(NSExceptionFromMonoException(monoException, @{}));
return _int64Number;
}
_______________________________________________
Mono-list maillist - [email protected]
http://lists.dot.net/mailman/listinfo/mono-list