[Mono-list] Calling method with complex arguments (embedded)

Robert Jordan robertj at gmx.net
Wed Mar 25 13:47:42 EDT 2009


Robert Bielik wrote:
> I'm trying to call a function with prototype:
> 
> void process(List< double[] >  ins,
>             ref List<double[]> outs);
> 
> from my c++ code, but I'm a bit stumped on how to create the arguments?
> 
> Tried to retrieve the MonoClass* for System.Collections.Generic.List via
> mono_class_from_name(mono_get_corlib(), "System.Collection.Generic", "List") but it
> returns NULL. 
> 
> Probably thinking wrong here?

MonoClass *klass = mono_class_from_name(mono_get_corlib(),
	"System.Collection.Generic", "List`1");


Now obtain the MonoReflectionType of this class:

MonoReflectionType *t = mono_type_get_object (mono_class_get_type (klass));

Then invoke t.MakeGenericType (new Type [] {typeof (double[]) })
with mono_runtime_invoke to obtain the constricted type
(List<double[]>).

BTW, It's easier to do this work with a managed helper method:

public static Type MakeGenericType (Type type, Type[] parms)
{
	return type.MakeGenericType (parms);
}


Robert



More information about the Mono-list mailing list