重写C+的串行端口通信+;到C# 我想知道我是否正确地映射了这个C++代码,它将串口通信建立到C?
这是我的C#映射: 我需要实现一些其他的读写操作(根据协议),直到我可以测试我的映射是否正确,所以这就是为什么我想再次检查我在将上述代码映射到C#时是否采取了正确的方法?或者我应该走PInvoke电话的路线?还是仍然尝试我目前的方法?谢谢重写C+的串行端口通信+;到C# 我想知道我是否正确地映射了这个C++代码,它将串口通信建立到C?,c#,c++,serial-port,C#,C++,Serial Port,这是我的C#映射: 我需要实现一些其他的读写操作(根据协议),直到我可以测试我的映射是否正确,所以这就是为什么我想再次检查我在将上述代码映射到C#时是否采取了正确的方法?或者我应该走PInvoke电话的路线?还是仍然尝试我目前的方法?谢谢 PS。你可以看到这样的方式,我不能复制所有参数,C++调用允许一个使 我会添加初始化: m_port.DataReceived += _serial_DataReceived; 从端口获取数据的事件。这是异步工作的需要 及 阅读我在处理不同的功能,我循环,
PS。你可以看到这样的方式,我不能复制所有参数,C++调用允许一个使
我会添加初始化:m_port.DataReceived += _serial_DataReceived;
从端口获取数据的事件。这是异步工作的需要
及
阅读我在处理不同的功能,我循环,直到我确保我收到了所有的数据。没有得到你的评论一切都正确。我在写——我是如何思考的,用俄语思考:)至少我使用PInvoke的一个原因是:
dcb->fOutxDsrFlow
。不幸的是,SerialPort
不支持此功能,当许多串行设备使用DSR
线路通知主机时,该设备已准备好接收数据(或设备正忙)。大多数代码看起来是等效的。@Dennis:Dennis,是的,但请看这里:,如何将DCB结构转换为C#,它基于一些位标志。我明白你关于DSR的观点(可能会发生,但我只需要启用DTR和RTS)
public SerialPortHASP(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits, bool dtr, bool rts, bool xonxoff)
{
m_port = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
// Just store parameters user entered
m_portName = portName;
m_baudRate = baudRate;
m_parity = parity;
m_dataBits = dataBits;
m_stopBits = stopBits;
m_xonxoff = xonxoff;
m_dtr = dtr;
m_rts = rts;
// Set XonXoff if set
if (xonxoff)
m_port.Handshake = Handshake.XOnXOff;
// Set DTR/RTS
m_port.DtrEnable = dtr;
m_port.RtsEnable = rts;
m_port.ReadTimeout = 500; // or some other values
m_port.WriteTimeout = 500;
// Open the port for communications
m_port.Open();
}
m_port.DataReceived += _serial_DataReceived;
void _serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int _len = _serial.BytesToRead;
byte[] _out = new byte[_len];
_serial.Read(_out, 0, _len);
}