[Mono-list] NullReferenceException when calling thunk

tomason tom at creamysoft.com
Wed Jan 23 05:43:48 UTC 2013


Hello, everyone!

I'm experiencing a problem calling an unmanaged thunk into managed code. 
The first time I call the thunk, it works perfectly.  The second time, my
debugger receives a seg fault and then mono prints out that I got a
NulllReferenceException.  Calling mono_runtime_invoke on the managed method
also works perfectly, every time I call it.  I want to get thunks working
though, since performance is a concern.

I'm writing a simple app to compare performance of calling managed methods
vs calling other C++ methods, so the code I'm posting is hardly shippable,
but as far as I know, it's correct.

I init mono, register an internal call, and then run a simple C# assembly
that makes the internal call to give my C++ code a MonoObject* for the
managed class instance.  That part works perfectly, and looks like this:

g_mobj = mobj;
MonoClass *mclass = mono_object_get_class(mobj);
g_mmethod = mono_class_get_method_from_name(mclass, "Add", 2);
g_mthunk = (MonoAddFunc)mono_method_get_unmanaged_thunk(g_mmethod);

Where MonoAddFunc is defined like this:
typedef float (*MonoAddFunc)(MonoObject*, float, float);

This is the C# Add method:

public float Add(float a, float b) {
	return a + b;
}

This is the code for calling Add using mono_runtime_invoke (works
perfectly):

float a = 0.00001f, b = 0.00002f;
void *args[] = { &a, &b };
for(int i = 0; i < NUM_CALLS; ++i) {
	MonoObject *result = mono_runtime_invoke(g_mmethod, g_mobj, args, NULL);
	total += *(float*)mono_object_unbox(result);
}

This the code for calling Add with the thunk (fails on 2nd time through
loop, i == 1):

for(int i = 0; i < NUM_CALLS; ++i) {
	total += g_mthunk(g_mobj, 0.00001f, 0.00002f);
}

I wrote another test app where I created the thunk the same way, and it
works fine, but the other method I called in that app had no parameters.

Any help will be greatly appreciated!

-Tom



--
View this message in context: http://mono.1490590.n4.nabble.com/NullReferenceException-when-calling-thunk-tp4658230.html
Sent from the Mono - General mailing list archive at Nabble.com.


More information about the Mono-list mailing list