SerialPort与MSComm

时间:2011-01-27 17:34:45

标签: c# vb6 serial-port mscomm32

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

我希望他们都使用the underlying O/S API;但我想他们可能会以不同的方式使用该API:例如使用不同的默认COM端口参数(如果未明确指定参数)。

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

答案 2 :(得分:0)

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