首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VC >

点击按钮发送数据如何搞呢

2013-01-01 
点击按钮发送数据怎么搞呢void CCOMMDlg::OnJogup(){CString strtempstrtemp@JOG+////我定义了一个按

点击按钮发送数据怎么搞呢
void CCOMMDlg::OnJogup()     
{
CString strtemp;
strtemp="@JOG+";           ////    我定义了一个按钮,点击该按钮能够给驱动器发送"@JOG+"

     char TxData[100];  
         int Count = strtemp.GetLength();  
       for(int i = 0; i < Count; i++)  
           TxData[i] = strtemp.GetAt(i);  
              
             CByteArray array;       
              array.RemoveAll();            ///这句是清空array BYTE数组的意思吗?——问题一
             array.SetSize(Count);          ////设置array数组长度
 
      for(i=0;i<Count;i++)  
           array.SetAt(i, TxData[i]);           
         m_Comm.SetOutput(COleVariant(array));   ///////为什么要绕一个大圈子通过COLEVARIANT函数将数据发送出去             ——问题二
}

问题三:  我尝试这类似单片机的通信方式直接将数据发送出去:m_Comm.SetOutput(strtemp);那错的是一塌糊涂
想不通为什么,为什么不能直接将定义的字符串自己发送出去,而需要绕一个非常的大的圈子,把字符串放到一个BYTE数组里,然后又用COleVariant函数才能将数据发送出去?

问题四: 有没有更简单的方法能够将规定的字符串发送出去?
[解决办法]
1.array.RemoveAll()是清空动态数组的意思。 CByteArray 实际是CArray定义的动态数组,这个动态数组提供RemoveAll()来清空数组内容。
2.你是用的MS的MSCOMM控件吧,微软在设计控件时,并不是给VC设计的,而是几乎Windows平台下的所有开发工具都可以调用控件。为了保持兼容性往往使用Variant类型来作为中间类型进行数据传递,比仅仅是传入,很多控件的导出部分也是Variant类型。这个问题一般是自己在VC中再次封装一下,每次使用的时候调用自己封装好的函数即可。Variant和COleVariant楼主可以仔细去查查这两个类型,里面通过各种标识、标示来固定数据,甚是繁琐。
3.见第二个问题
4.首先自己封装。如果放弃MSCOMM控件可以考虑去网上找找串口通信类。有一些类是可以发送char数组的。要想发送CString类型的恐怕也得自己封装,中间肯定要经过自己变换。

最后,楼主不要在数据的类型上过分的追求,完全可以看成普通的INT BOOL等类型,至于转换多少次,如何实现,一般到网上找代码。我在开始学习VC的时候也是,觉得这么多类型的数据,转来转去真得是烦死了,后来也就无所谓了。管它什么HANDLE 什么struct 什么枚举啊,先当做INT看,把函数意思先看明白,再考虑后面的转换问题。

热点排行