Search code examples
c#dllserial-portvisual-studio-2015recompile

Errors when re-compiling a .dll


I'm getting the following errors when I try to rebuild a .dll

Please advise what can I replace these lines with so that the code will compile.

Background info (likely not relevant):

The .dll is part of an add-in output module for a program that controls Christmas lights. It outputs data from the program to the selected serial port telling the connected relay board which relays are to be on or off. I intend to modify the output to suit my device so instead of the output being FF FF FF 00 00 00 00 00 for relay 1 2 3 on and 4 5 6 7 8 off it will send the appropriate format for the board That I have. (see below)

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

Error CS0571 'SerialSetupDialog.SelectedPort.get': cannot explicitly call operator or accessor

It references the line in this section:

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();
}

Also there are 3 cases of: Error CS0221 Constant value '-128' cannot be converted to a 'byte' (use 'unchecked' syntax to override)

The compiler doesn't like this part of the code. "(byte) 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;
  }
}

Solution

  • The reason that (byte)sbyte.MinValue; throws an error is because sbytes minimal value is -128 whereas bytes minimal value is 0. Therefore converting that to the other will cause an overflow. If you really want this behaviour you can use the keyword unchecked as the following:

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

    However this will give b the value of 128.

    To answer the other part of your question I believe that replacing:

    serialSetupDialog.get_SelectedPort();
    

    with:

    serialSetupDialog.SelectedPort;
    

    should fix the issue.