Exemple #1
0
        /// <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);
            }
        }