Ошибки при повторной компиляции .dll

Я получаю следующие ошибки, когда пытаюсь восстановить .dll

Посоветуйте, чем можно заменить эти строки, чтобы код скомпилировался.

Справочная информация (вероятно, не актуальная):

Файл .dll является частью дополнительного модуля вывода для программы, которая управляет рождественскими огнями. Он выводит данные из программы на выбранный последовательный порт, сообщая подключенной плате реле, какие реле должны быть включены или выключены. Я намерен изменить вывод в соответствии с моим устройством, поэтому вместо вывода FF FF FF 00 00 00 00 00 для реле 1 2 3 включено и 4 5 6 7 8 выключено, он отправит соответствующий формат для платы, которая у меня есть. (Смотри ниже)

http://www.tinyosshop.com/image/data/board_modules/usbrelay4-5.jpg

Ошибка CS0571 «SerialSetupDialog.SelectedPort.get»: невозможно явно вызвать оператора или метод доступа

Он ссылается на строку в этом разделе:

private void buttonSerialSetup_Click(object sender, EventArgs e)
{
  SerialSetupDialog serialSetupDialog = new SerialSetupDialog(this.m_selectedPort);
  if (((Form) serialSetupDialog).ShowDialog() != DialogResult.OK)
    return;
  this.m_selectedPort = serialSetupDialog.get_SelectedPort();
}

Также есть 3 случая: Ошибка CS0221 Постоянное значение «-128» не может быть преобразовано в «байт» (используйте «непроверенный» синтаксис для переопределения)

Компилятору не нравится эта часть кода. "(байт) sbyte.MinValue;"

private void Protocol1Event(byte[] channelValues)
{
  int length1 = channelValues.Length;
  int count = 2;
  int length2 = 2 + 2 * length1 + (2 + 2 * length1) / 100;
  if (this.m_p1Packet.Length < length2)
    this.m_p1Packet = new byte[length2];
  this.m_p1Packet[0] = (byte) 126;
  this.m_p1Packet[1] = (byte) sbyte.MinValue;
  this.m_threadPosition = 10;
  for (int index = 0; index < length1; ++index)
  {
    if ((int) channelValues[index] == 125)
    {
      this.m_threadPosition = 11;
      this.m_p1Packet[count++] = (byte) 124;
    }
    else if ((int) channelValues[index] == 126)
    {
      this.m_threadPosition = 12;
      this.m_p1Packet[count++] = (byte) 124;
    }
    else if ((int) channelValues[index] == (int) sbyte.MaxValue)
    {
      this.m_threadPosition = 13;
      this.m_p1Packet[count++] = (byte) sbyte.MinValue;
    }
    else
    {
      this.m_threadPosition = 14;
      this.m_p1Packet[count++] = channelValues[index];
    }
    if (count % 100 == 0)
    {
      this.m_threadPosition = 15;
      this.m_p1Packet[count++] = (byte) 125;
    }
    this.m_threadPosition = 16;
  }
  this.m_threadPosition = 17;
  if (this.m_running)
  {
    while (this.m_selectedPort.WriteBufferSize - this.m_selectedPort.BytesToWrite <= count)
      Thread.Sleep(10);
    this.m_threadPosition = 18;
    this.m_selectedPort.Write(this.m_p1Packet, 0, count);
    this.m_threadPosition = 19;
  }
  this.m_threadPosition = 20;
}

private void Protocol2Event(byte[] channelValues)
{
  byte num1 = (byte) sbyte.MinValue;
  int length = channelValues.Length;
  byte[] array = new byte[8];
  int num2 = 0;
  while (num2 < length)
  {
    int num3 = Math.Min(num2 + 7, length - 1);
    this.m_p2Packet[1] = num1++;
    if (num3 >= length - 1)
      this.m_p2Zeroes.CopyTo((Array) this.m_p2Packet, 3);
    Array.Clear((Array) array, 0, 8);
    for (int index = num2; index <= num3; ++index)
    {
      byte num4 = channelValues[index];
      byte num5 = num4;
      if ((int) num4 >= 1 && (int) num4 <= 8)
        array[(int) num4 - 1] = (byte) 1;
      else if ((int) num5 >= 1 && (int) num5 <= 8)
        array[(int) num5 - 1] = (byte) 1;
    }
    byte num6 = (byte) (1 + Array.IndexOf<byte>(array, (byte) 0));
    this.m_p2Packet[2] = num6;
    int index1 = num2;
    int count = 3;
    while (index1 <= num3)
    {
      this.m_p2Packet[count] = (byte) ((uint) channelValues[index1] - (uint) num6);
      ++index1;
      ++count;
    }
    if (this.m_running)
      this.m_selectedPort.Write(this.m_p2Packet, 0, count);
    num2 += 8;
  }
}

person Daniel Stewart    schedule 20.11.2015    source источник


Ответы (1)


Причина, по которой (byte)sbyte.MinValue; выдает ошибку, заключается в том, что минимальное значение sbytes равно -128. тогда как минимальное значение bytes равно 0. Поэтому преобразование этого в другое вызовет переполнение. Если вам действительно нужно такое поведение, вы можете использовать ключевое слово unchecked, как показано ниже. :

byte b = unchecked((byte)sbyte.MinValue);

Однако это даст b значение 128.

Чтобы ответить на другую часть вашего вопроса, я считаю, что замена:

serialSetupDialog.get_SelectedPort();

с:

serialSetupDialog.SelectedPort;

должен решить проблему.

person TheLethalCoder    schedule 20.11.2015
comment
Спасибо :), это помогло (ошибка исчезла). Осталась только 1 другая ошибка. Я не уверен, что это было задумано, но предположу, что это было так, как это работало в оригинале. - person Daniel Stewart; 20.11.2015
comment
Методом проб и ошибок мне удается разобраться с другой ошибкой. Я заменил: serialSetupDialog.get_SelectedPort(); с: serialSetupDialog.SelectedPort; - person Daniel Stewart; 20.11.2015
comment
Хорошее простое исправление, спасибо за обновление, добавленное в мой ответ, так что оно завершено. - person TheLethalCoder; 20.11.2015