串口写c ++

时间:2015-09-24 20:39:11

标签: c++ visual-studio-2010 serial-port

我在C++的编程方面很陌生,我需要你的帮助。

我想创建一个简单的GUI,它将通过serial port与外部设备进行通信并将char类型打磨到设备。我的问题是下一个

  1. 我不明白mySirialPort->Write(array<Char>^, Int32, Int32) --- array<Char>^我需要写什么类型variable
  2. 因为我得到了下一个错误。

    1>Return_NAN.cpp(19): error C2440: 'initializing' : cannot convert from 'const char [2]' to 'char'
    1>          There is no context in which this conversion is possible
    1>Return_NAN.cpp(30): error C2664: 'void System::IO::Ports::SerialPort::Write(cli::array<Type,dimension> ^,int,int)' : cannot convert parameter 1 from 'char' to 'cli::array<Type,dimension> ^'
    1>          with
    1>          [
    1>              Type=wchar_t,
    1>              dimension=1
    1>          ]
    

    我的代码:

    char a = "A";        
    SerialPort^ mySerialPort = gcnew SerialPort(a);
    //mySerialPort->PortName = a;   
    mySerialPort->BaudRate = 1200;
    mySerialPort->Parity = Parity::None;
    mySerialPort->StopBits = StopBits::One;
    mySerialPort->DataBits = 8;
    mySerialPort->Handshake = Handshake::None;
    mySerialPort->Open();
    mySerialPort->Write(t,0,1); // problem
    mySerialPort->Close();
    

    如果我写&#34; A&#34;直接写函数我编译时没有错误。

    感谢您的帮助, KB

2 个答案:

答案 0 :(得分:1)

System :: IO :: Ports :: SerialPort是一个.NET类。请记住,您正在使用名为C ++ / CLI的语言扩展,通过阅读基本教程,您将节省大量时间。它与C ++有很大的不同,有一个学习曲线,一周会很好地学习基本类型并知道何时使用^ hat。

您已经发现编写字符串很简单,SerialPort :: Write()有一个接受字符串的重载。它会将字符串转换为ASCII,因此您只能写入0到127之间的字符值:

String^ example1 = "ABC";
mySerialPort->Write(example1);

写入单个字节最简单,只需写入BaseStream,不进行任何转换:

Byte example2 = 'A';   // or 0x41
mySerialPort->BaseStream->WriteByte(example2);

如果你想写一个字节数组,就像你说的错误信息,那么你必须创建一个数组对象:

array<Byte>^ example3 = gcnew array<Byte> { 0x01, 0x02, 0x42 };
mySerialPort->Write(example3, 0, example3->Length);

没有理由支持在一次写入一个字节时写入一个字节数组,无论如何串口都很慢。

答案 1 :(得分:0)

第一个错误很简单:您应该使用单引号编写:char a = 'A';,而使用双引号编写"a"

array^是clr引用类型,可能需要这样的内容:array<char>^ t = {1,2,3}; look here:

但最好使用write(string^) look here:

您可以将其转换为c字符串,如下所示:

const char* str = "Hello, world!";
String^ clistr = gcnew String(str);//allocate cli string and convert the c string
// no need to delete, garbage collector will do it for you.
mySerialPort->Write(clistr);