关于微软串口控件问题,很奇怪,VC Debug版本没有问题, Release版本就出错. 我需要接收硬件串口发送的消息,在控件的接收事件中收到数据并放入缓冲后,通过消息发送给程序,程序读取数据处理,处理部分没有问题,而且在Debug版本下程序能正常工作,而编译成Release版本后执行就出异常,我跟踪程序汇编代码,发现是程序调用一个2E中断后连接到非法地址上,有谁能告诉我如何解决吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 具体代码如下:void ononmscomm(){ if( ms_comm.GetCommEvent() == 2 ) { len = m_msComm.GetInBufferCount(); varBuff = m_msComm.GetInput(); //读缓冲区 CopyMemory( btRecvBuff, varBuff.parray->pvData, len ); PostMessage( msg, 0, 0 );//发送我定义的消息进行处理 }}初始化部分: m_msComm.SetCommPort( 1 ); if( !m_msComm.GetPortOpen() ) m_msComm.SetPortOpen( TRUE ); else return FALSE; m_msComm.SetSettings( "9600,n,8,1" ); m_msComm.SetInputMode( 1 ); m_msComm.SetRThreshold( 3 ); m_msComm.SetInputLen( 0 ); m_msComm.GetInput();奇怪的是,在第1.2次接收时没有错误,而第3次接收时就出异常,访问非法地址. btRecvBuff设置大于len.varBuff = m_msComm.GetInput(); //读缓冲区len = m_msComm.GetInBufferCount();CopyMemory( btRecvBuff, varBuff.parray->pvData, len );最好改为:BYTE*pb;varBuff = m_msComm.GetInput(); //读缓冲区len = m_msComm.GetInBufferCount();pb=new BYTE[len];CopyMemory( btRecvBuff, varBuff.parray->pvData, len );……delete[]pb; 全局键盘HOOK【窗口焦点变化时】变量的值 画图板问题 检测 可用串口号的问题? 求一本游戏编程的电子书要附带源码的 关于CDC显示字符有重影的问题 如何将指定的位图设置为视图和对话框的背景? 请问如果在odbc调用sql server上的存储过程,执行的sql语句怎么写?(带有varchar类型参数的) 请问,有人在北京的维新和锐信这两家培训中心培训过吗? 请问.bmf文件用什么打开? 请问进程句柄和进程ID的区别和关系,以及进程和模块的关系 为什么出错呀? 关于任务的句柄
{
if( ms_comm.GetCommEvent() == 2 )
{
len = m_msComm.GetInBufferCount();
varBuff = m_msComm.GetInput(); //读缓冲区
CopyMemory( btRecvBuff, varBuff.parray->pvData, len );
PostMessage( msg, 0, 0 );//发送我定义的消息进行处理
}
}初始化部分:
m_msComm.SetCommPort( 1 );
if( !m_msComm.GetPortOpen() )
m_msComm.SetPortOpen( TRUE );
else
return FALSE;
m_msComm.SetSettings( "9600,n,8,1" );
m_msComm.SetInputMode( 1 );
m_msComm.SetRThreshold( 3 );
m_msComm.SetInputLen( 0 );
m_msComm.GetInput();奇怪的是,在第1.2次接收时没有错误,而第3次接收时就出异常,访问非法地址.
len = m_msComm.GetInBufferCount();
CopyMemory( btRecvBuff, varBuff.parray->pvData, len );最好改为:
BYTE*pb;
varBuff = m_msComm.GetInput(); //读缓冲区
len = m_msComm.GetInBufferCount();
pb=new BYTE[len];
CopyMemory( btRecvBuff, varBuff.parray->pvData, len );
……
delete[]pb;