[Mono-list] NullReferenceException when calling thunk

tomason tom at creamysoft.com
Wed Jan 23 19:32:26 UTC 2013


Ahh, delegates!  Those are even better than thunks, because I don't have to
pass the MonoObject in too.

Unfortunately, I can't get those to work at all.  To my method called by C#
to register the managed object, I added a parameter that takes a delegate.
 In C#, I call it like this:

var mc = new MainClass();
native_RegisterObject(mc, mc.Add);

On the C++ side, I have this:

typedef float (*MonoAddFunc)(float, float);

void native_RegisterObject(MonoObject *mobj, MonoAddFunc delegate) {
g_mobj = mobj;
g_delegate = delegate;
}

In the debugger, delegate is a non-zero number.  I was using
native_RegisterObject as an internal call, but I noticed in your code here
you had "DllImport(...)" inside your C# for calling the native method.  I
read more in the documentation that the difference between P/Invoke and
internal calls is that P/Invoke does more marshaling, which is seems like I
need in this case to marshal the delegate into a C++ function pointer.

However, when I run that, I get an EntryPointNotFound exception.  I put an
extern "C" block around my native_RegisterObject, but that didn't help.

In C#, this is how I declare the native function:

private delegate float AddDelegate(float a, float b);

[DllImport("__Internal", EntryPoint="native_registerObject")]
private static extern void native_registerObject(MainClass instance,
AddDelegate add);

And then I call that as above.

Can I use internal calls for registering a delegate?  If not, how do I
expose my native functions such that the runtime can find them in the image
that's running?

Thanks for you help, Robert!

-Tom




--
View this message in context: http://mono.1490590.n4.nabble.com/NullReferenceException-when-calling-thunk-tp4658230p4658247.html
Sent from the Mono - General mailing list archive at Nabble.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-list/attachments/20130123/587b8c92/attachment.html>


More information about the Mono-list mailing list