c# - 串行端口与 MSComm

标签 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();

最佳答案

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

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

相关文章:

c# - 在 com 端口 c# 上拒绝访问

c# - 将服务器端生成的 PDF 发送到浏览器

c# - 如何判断对象初始化程序何时完成

winforms - 将 VB6 项目转换为 .net- 引用错误?

c++ - 检测移除打开的串口设备(Qt/Windows)

c - 使用 radio 调制解调器可以使用的最快、可靠的波特率是多少?

c# - ASP.NET 标识和 SignalR

c# - 使用 R.NET 从 c# 控制台应用程序中的 r 源文件调用函数

vb6 - Visual Basic 6.0 中的运算符优先顺序是什么?

vb6 - 如何隐藏/删除 UserControl VB6 中的 ToolTipText 属性