问题描述
我是VS初学者,我没用过VC6.0,对托管也不怎么理解。最近想做一个和PLC通信的程序,在网上看到很多千篇一律的代码,结果发现根本行不通,所有的方法都依赖于MSCOMM控件,代码如下:voidCSCommTestDlg::OnComm() { VARIANTvariant_inp; COleSafeArraysafearray_inp; LONGlen,k; BYTErxdata[2048];//设置BYTE数组(8位无符号整数) CStringstrtemp; if(m_ctrlComm.GetCommEvent()==2)//事件值为2表示接收缓冲区内有字符 { variant_inp=m_ctrlComm.GetInput();//读缓冲区 safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量 len=safearray_inp.GetOneDimSize();//得到有效数据长度 for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组 for(k=0;k<len;k++) { PLCData[k]=rxdata[k]; }
解决方案
解决方案二:
首先VARIANT、COleSafeArray、BYTE和CString类型在VS2005里能不能用就很令人怀疑。即使添加了<stdafx.h>之类的头文件,也只会遇到更多的错误,比如,重复定义。
解决方案三:
目前我只想知道,怎么用纯正的C++.NET代码开发串口通信程序。
解决方案四:
我现在想实现的功能很简单,PLC发东西过来,触发MSCOMM的OnComm事件,然后把内容存在数组里,转换成字符串输出到TextBox里去。只是这个过程中涉及到很多问题,比如MSCOMM的很多属性和方法在VS2005里面都不一样了,还有接受到的字符应该放在一个怎样的万能数组里?(VARIANT似乎是不行的)最后输出的时候,TextBox的Text属性好像也对数据类型有一定的要求。诸如此类的问题一直困扰着我,而且从接触.NET以来,我一直没有搞懂托管数组的用法。很多时候,我只看到指针被句柄替代;用个方法还要罗里吧嗦地把基类都翻出来些写一遍;数组用起来也不如C语言里那么灵活了。经典的C++代码,什么时候能运行,什么时候会出错,就像定时炸弹一样,爆炸了还找不到原因是什么。我只能说,C++烦,VC++烦,MFC烦,.NET更烦,还有,我智商太低了,学的真累。不好意思扯远了,哪位仁兄能告诉我怎么在VS2005里用MSCOMM和PLC通信,或者直接用API函数,小弟都将感激不尽!
解决方案五:
这个问题范畴比较大,你应该先去看相关串口通讯范例及说明可以用MSCOMM控件来编程,但需要注册控件但VC一般用串口类来编程更好,串口类一般有现成的,包括在一般例程中
解决方案六:
去网上艘一下串口类,有人家封装好的类,串口通信的关键是创建和读写,
解决方案七:
关注关注关注
解决方案八:
up~~
解决方案九:
其實這個很簡單,用法太致如下,其它的可以參考MSDN的C#資料。//建立一個SeailPortSystem::IO::Ports::SerialPort^sp=gcnewSystem::IO::Ports::SerialPort;//OpenCOMsp->PortName="COM1";//開啟COM1sp->BaudRate="57600";//鮑率75600sp->Open();//打開COM//CloseCOMsp->Close();//Writearray<Byte>^tbuffer=gcnewarray<Byte>(6);sp->BaseStream->Write(tbuffer,0,6);orsp->BaseStream->WriteByte('a');//Readarray<Byte>^rbuffer=gcnewarray<Byte>(6);sp->BaseStream->Read(rbuffer,0,6);orByterb;rb=sp->BaseStream->ReadByte();
解决方案十:
该回复于2012-05-30 11:20:29被版主删除
解决方案十一:
该回复于2012-05-30 11:20:30被版主删除
解决方案十二:
mfc扩展编程实例很简单的实现了串口通信,直接copy过来就可以用,用的是CFile类