public int CalculateSudokuAll(bool dancing, SudokuAnswerCallback cb) { IntPtr ansPtr = Marshal.GetFunctionPointerForDelegate(new SudokuLib.AnswerCallback((IntPtr data, IntPtr answer, int size) => { if (cb == null) { return; } string result = Marshal.PtrToStringAnsi(answer, size); cb.Invoke(result); })); return(SudokuLib.CalculateSudokuAll(sudo, (byte)(dancing ? 1 : 0), ansPtr, IntPtr.Zero)); }