点击按钮发送数据怎么搞呢
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看,把函数意思先看明白,再考虑后面的转换问题。