佚名通过本文主要向大家介绍了
一个简单的MSCOMM控件问题!谢谢了等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 一个简单的MSCOMM控件问题!谢谢了
描述:
这个是OnOnCommMscomm函数
运行后,用串口调试工具,发送数据。单步调试到
就出个对话框提示 0x000000005:access violation
发现
variant_inp 显示???
。帮看下 谢谢了!!!!!!!!
解决方案1:
描述:
1.有个问题折磨我来一下午。。。帮看下。
这个是打开函数
if (m_CtrlCom.GetPortOpen())
{
m_CtrlCom.SetPortOpen(FALSE);
}
m_CtrlCom.SetCommPort(pFrm->iCurrentCom); //选择COM1
m_CtrlCom.SetInBufferSize(1024); //接收缓冲区
m_CtrlCom.SetOutBufferSize(1024);//发送缓冲区
m_CtrlCom.SetInputMode(1);//以二进制方式读写数据
m_CtrlCom.SetRThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
m_CtrlCom.SetSettings("9600,n,8,1");//波特率9600无检验位,8个数据位,1个停止位
if(!m_CtrlCom.GetPortOpen())//如果串口没有打开则打开
{
m_CtrlCom.SetPortOpen(TRUE);//打开串口
MessageBox("连接成功!");
}
else
{
m_CtrlCom.SetOutBufferCount(0);
}
m_CtrlCom.GetInput();
这个是OnOnCommMscomm函数
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048];
if (m_CtrlCom.GetCommEvent()==2)//事件2 表示 接收缓冲区内有字符
{
variant_inp=m_CtrlCom.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++)//将数组转换为CString型变量
{
BYTE bt=*(char*)(rxdata+k);//字符型
pFrm->RData[k]=bt;
}
DataCount();
}
运行后,用串口调试工具,发送数据。单步调试到
就出个对话框提示 0x000000005:access violation
发现
variant_inp 显示???
。帮看下 谢谢了!!!!!!!!
解决方案1:
这应该没问题的啊
要不你在设置发送、接受缓冲区大小后面再加句:
m_CtrlCom.SetInputLen(0);//设置当前接收区数据长度为0
len=safearray_inp.GetOneDimSize();
这一句?是在执行这句之前还是执行之后弹出提示的?
不应该啊。。。
可以打包给我看看,252237099@qq.com