Wednesday, May 16, 2012

mono_delegate_to_ftnptr: function call hangs

I'm embedding mono 2.10.8 into my application and have some troubles with functions, registered with mono_add_internal_call

Let's say i have managed method:

internal delegate void Win32ServiceHandler(long statusCode);

internal static class Win32Service
public static extern void Test(Win32ServiceHandler handler);

it's unmanaged definition:

void icall_TestDelegateCallback(MonoDelegate *ftn) {
LPHANDLER_FUNCTION f = (LPHANDLER_FUNCTION)mono_delegate_to_ftnptr(ftn);

and some code to test:

protected virtual void ServiceHandler(Win32ServiceControl statusCode)

public void MakeTest()

I run it from console application and when i call MakeTest(), the output is:


And application never return.

Actually it is a simplified eexample. In real program i need to pass function pointer as a callback to RegisterServiceCtrlHandler so stuff like mono_runtime_invoke (that btw works fine) etc isn't what i need.

The question is what is the proper way to call a function pointer obtained from MonoDelegate? Or is it any other correct way to pass it as a callback?

My platform is Windows 7 x64

No comments:

Post a Comment