.Net SerialPort和VB6 MSComm是否可能工作不同?

在这两种情况下,我都是从缓冲区读取数据,并且都给了我不同的字符串,如果我将MSComm dll导入到我的.Net项目中,它可以完美(显然)工作。

有谁拥有更多的深入信息?

如果有帮助,这是我的简单示例,在两种情况下,我都发送相同的字节数组...

VB6:

Dim MSComm1 As Object
Dim ArrToSend() As Byte
Dim IncomeData As String
Set MSComm1 = CreateObject("MSCommLib.MSComm")
With MSComm1
    .CommPort = 1
    .PortOpen = True
End With

ReDim ArrToSend(4)
ArrToSend(0) = 179
ArrToSend(1) = 1
ArrToSend(2) = 92
ArrToSend(3) = 92
MSComm1.Output = ArrToSend
IncomeData = MSComm1.Input


C#

SerialPort _serialPort = new SerialPort();
_serialPort.Open();
Byte[] _bytesToSend = new Byte[4];
_bytesToSend[0] = 179;
_bytesToSend[1] = 1;
_bytesToSend[2] = 92;
_bytesToSend[3] = 92;
_serialPort.Write(_bytesToSend, 0, _bytesToSend.Length);
String ReadExisting = _serialPort.ReadExisting();

最佳答案

您正在混合字节和字符串。 MSComm对此很松懈,但是SerialPort关心文本编码。显然,您使用的是二进制协议,很可能您收到的字符串包含无法转换为SerialPort.Encoding的字节的问号(默认为ASCII)。您必须使用Read()方法来获取响应。

关于c# - 串行端口与MSComm,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4819787/

10-15 16:19