[Mono-list] Mono Boolean to C bool
    Robert Jordan 
    robertj at gmx.net
       
    Sun Nov 16 11:40:05 EST 2008
    
    
  
Kevin Heeney wrote:
> I am using C to invoke Mono and it is working well.  A few weeks ago I 
> hit an issue where I was calling a few functions that returned a boolean 
> from Mono.  I changed those functions to return an integer ( I cast the 
> boolean to an int and did Math.Abs on that int in Mono) and just set the 
> returned int to a bool in C.  That worked fine, but now I am 
> re-evaluating and cleaning some things up.  What would be the best way 
> to take a MonoObject* referencing a Boolean and get a C bool out of it 
> (or a integer representing the value of that boolean).
> 
> I have a couple of ideas for ways to do this that I know would work, but 
> I have a feeling there is an easier way.
> 
> In other words, how can I get a C bool (or an int where false=0 and true 
> is anything else) out of the monOb in this code:
> 
>         MonoMethodDesc *monoMethDesc2 =  mono_method_desc_new 
> (":callSomeMethodThatReturnsABoolean()",FALSE);
>         MonoMethod *meth2=     mono_method_desc_search_in_class 
> (monoMethDesc2, myMonoClass);
>         MonoObject* monOb =  mono_runtime_invoke (meth2, 
> theObjectThatOwnsTheMethodThatReturnsABoolean, NULL, NULL);
You must unbox value types because mono_runtime_invoke is
always returning value types boxed as objects:
if (monObj) {
	MonoBoolean *b = (MonoBoolean*) mono_object_unbox (monOb);
	if (*b) {
		--> true
	} else {
		--> false
	}
} else {
	// handle error condition
}
Robert
    
    
More information about the Mono-list
mailing list