hur.cn - 华软网

 热门搜索

VC6.0串口发送数据

  作者:未知    来源:网络    更新时间:2010/12/9
我在运用VC6.0传口举行232通讯,我在VC6.0对话框窗体中放置了以串口控件,并为串口控件增加了一控制型的变量seril,我自己写了一串口发送函数senddata
详细代码以下,
void senddata(int a,int b)
{
 CByteArray array; 
 array.SetSize(5); 
 int i;
 int sum=0;
 array[0] = 0xaa;  
 array[1] = 0xaa; 
 array[2] = a; 
 array[3] = b; 
 for(i=0;i<4;i++)
 {
  sum=sum+array[i];
 }
 array[4] = sum%256; 
 m_seril.SetOutput(COleVariant(array)); 
}
我在一组合框的下拉菜单响应函数中,调用了该函数,向串口发送数据,却报了错,然则编译和链接都是正确的,希望有经验的师傅能够给予指点,谢谢啊,急用啊。
另外,我想知道怎样控制组合框中下拉菜单中,各项的顺序,比如我在一组合框中增加了以下代码
         m_combol1.AddString("王五");
m_combol1.AddString("李四");
m_combol1.AddString("张三"); 
然则下拉菜单中的顺序却是张三,王五,李四,为什么会这样啊,怎样才能让顺序为 王五,李四,张三
---华软 网友回答---
先说第二个问题 由于你的控件属性里面 选择了 自动排序

第一个没用过 我都是直接CREATEFILE 打开串口
WRITEFILE写串口
READFILE读串口
---华软网友回复---
用控件写串口程序的话很麻烦的,由于最后打包了你还得写注册函数;
对于第一个问题,给你个例子看看:
C++">
void SendInstructionSet()
{
//发送前清空缓冲区
m_seril.SetRTSEnable(0);
m_seril.SetInBufferCount(0);

for(int i=0; i<length; i++)
{
     CommDataSend(array[i]);
}
}

void CommDataSend(BYTE data)
{
CByteArray hexdata;
hexdata.Add(data);
m_seril.SetOutput(COleVariant(hexdata));
}

第二个问题,把ComboBox控件属性的Sort项的钩去掉即可;
---华软网友回复---
SetOutput是每次发送一个字节的,所以你那样操作的话会犯错
---华软网友回复---
我看了你的程序,我想说的是,当我把我这段代码
CByteArray array;  
 array.SetSize(5);  
 int i;
 int sum=0;
 array[0] = 0xaa;   
 array[1] = 0xaa;  
 array[2] = a;  
 array[3] = b;  
 for(i=0;i<4;i++)
 {
  sum=sum+array[i];
 }
 array[4] = sum%256;  
 m_seril.SetOutput(COleVariant(array));  
放在了对框框中的控件措置惩罚程序中的时候,不会犯错,能够正确的运行,通过232发送出我要发送的数据,然则我自己写做一全局函数调用的时候,却会犯错
---华软网友回复---
怎样修改才能是实现我要的那样,谢谢指点 啊
---华软网友回复---
m_seril 应该 归属这个对话框所有,你写的全局函数改成 对话框成员函数就能够了。或在需要发送的地方通知对话框中运用m_seril发送就能够了。
---华软网友回复---
最好少用全局函数或全局变量;
如果你想在以后多个类中调用串口发送死令的话,能够将这个串口类封装起来以供后续调用。
至于你犯错的情况,可能是m_seril定义的问题,一定要设置为全局函数的话,你就得使这个变量的生命周期也随着转变才行,所以很麻烦的。
---华软网友回复---
第一个问题:没有怎么明白什么毛病 。
在全局函数中实现,能够用API读写串口。

你的第二个问题:你在组合框的style中取消sort就好了。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。