2

.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();
4

3 回答 3

5

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

于 2011-01-27T19:09:51.160 回答
1

我希望他们都使用底层的 O/S API;但我猜他们可能都以不同的方式使用该 API:例如使用不同的默认 COM 端口参数(如果您没有明确指定参数)。

另一个区别可能在于时间:当您读取输入/回复时,您如何知道它是否已发送,以及您如何知道“读取”或“输入”函数等待的时间是否足够长?

于 2011-01-27T17:41:41.700 回答
0

MSComm 和 Serialport 是免费的礼物,没有太多共同点。SuperCom是一个众所周知的可让您免于麻烦的便携式库。它提供了一个与 MSComm 兼容的ActiveX以及一个 A NET 类库。一个人可以使用更合适的那个。它可以与 C++、Delphi、VB6、VB net、C#、FreePascal、Perl、Java 等一起使用。它完全兼容 32 位和 64 位的 Windows,包括。Windows XP、7、8、10。

于 2015-11-13T09:09:01.540 回答