/// <summary> /// Checks if unmanaged status code represents an error. If true this error will be thrown. /// </summary> /// <param name="errorCode">The error code.</param> /// <param name="callerMemberName">The name of the calling function.</param> public static void CheckErrorCode(IntPtr context, int errorCode, [CallerMemberName()] string callerMemberName = "") { if (errorCode <= 0) { string message_server; string message_SOEM = string.Empty; string message_combined = string.Empty; errorCode = -errorCode; // message_server message_server = ErrorMessage.ResourceManager.GetString($"Native_0x{ errorCode.ToString("X4") }"); if (string.IsNullOrWhiteSpace(message_server)) { message_server = ErrorMessage.Native_0xFFFF; } // message_SOEM while (EcHL.HasEcError(context)) { if (!string.IsNullOrWhiteSpace(message_SOEM)) { message_SOEM += "\n"; } message_SOEM += Marshal.PtrToStringAnsi(EcHL.GetNextError(context)); } // message_combined message_combined = $"{ callerMemberName } failed (0x{ errorCode.ToString("X4") }): { message_server }"; if (!string.IsNullOrWhiteSpace(message_SOEM)) { message_combined += $"\n\nEtherCAT message:\n\n{ message_SOEM }"; } throw new Exception(message_combined); } }