public static void SetErrorReasonCallback(ErrorReasonCallback callback) { CurrentErrorReasonCallback = (IntPtr cstr) => { int strLen = 0; while (Marshal.ReadByte(cstr, strLen) != '\0') { strLen++; } byte[] bytes = new byte[strLen]; Marshal.Copy(cstr, bytes, 0, strLen); string csStr = Encoding.UTF8.GetString(bytes); callback?.Invoke(csStr); }; CurrentErrorReasonCallbackPtr = Marshal.GetFunctionPointerForDelegate(CurrentErrorReasonCallback); SetErrorReasonCallback(CurrentErrorReasonCallbackPtr); }
public static void SetErrorReasonCallback(ErrorReasonCallback callback) { //FIXME: not implemented on macOS and Linux }