Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写C+的串行端口通信+;到C# 我想知道我是否正确地映射了这个C++代码,它将串口通信建立到C?_C#_C++_Serial Port - Fatal编程技术网

重写C+的串行端口通信+;到C# 我想知道我是否正确地映射了这个C++代码,它将串口通信建立到C?

重写C+的串行端口通信+;到C# 我想知道我是否正确地映射了这个C++代码,它将串口通信建立到C?,c#,c++,serial-port,C#,C++,Serial Port,这是我的C#映射: 我需要实现一些其他的读写操作(根据协议),直到我可以测试我的映射是否正确,所以这就是为什么我想再次检查我在将上述代码映射到C#时是否采取了正确的方法?或者我应该走PInvoke电话的路线?还是仍然尝试我目前的方法?谢谢 PS。你可以看到这样的方式,我不能复制所有参数,C++调用允许一个使 我会添加初始化: m_port.DataReceived += _serial_DataReceived; 从端口获取数据的事件。这是异步工作的需要 及 阅读我在处理不同的功能,我循环,

这是我的C#映射:

我需要实现一些其他的读写操作(根据协议),直到我可以测试我的映射是否正确,所以这就是为什么我想再次检查我在将上述代码映射到C#时是否采取了正确的方法?或者我应该走PInvoke电话的路线?还是仍然尝试我目前的方法?谢谢


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);
 }