重新编译.dll时出错

时间:2015-11-20 09:00:44

标签: c# dll serial-port visual-studio-2015 recompile

当我尝试重建.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':无法显式调用operator或accessor

它引用了本节中的行:

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'无法转换为'byte'(使用'unchecked'语法覆盖)

编译器不喜欢这部分代码。 “(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;
  }
}

1 个答案:

答案 0 :(得分:1)

(byte)sbyte.MinValue;抛出错误的原因是sbytes最小值为-128而bytes最小值为0.因此将其转换为另一个将导致溢出。如果您确实需要此行为,可以使用关键字unchecked,如下所示:

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

然而,这将使b的值为128。

要回答问题的其他部分,我相信更换:

serialSetupDialog.get_SelectedPort();

使用:

serialSetupDialog.SelectedPort;

应解决问题。