Два дня возился с тем, что калбасная функция вызывалась как-то криво. Оказывается указатель на неё нужно получать так:

System.IntPtr unmanagedFunctionPointer = System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate(myDelegate);