我在C++
的编程方面很陌生,我需要你的帮助。
我想创建一个简单的GUI
,它将通过serial port
与外部设备进行通信并将char类型打磨到设备。我的问题是下一个
mySirialPort->Write(array<Char>^, Int32, Int32) --- array<Char>^
我需要写什么类型variable
。因为我得到了下一个错误。
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
答案 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);