指令引用的内存不能read

qingfeng029 2015-03-07 05:35:05
用flash控件调用别人做好的Flash程序(swf格式),收到串口数据五六次过后(前面的五六次都是正常的),再点击界面就会报错了
代码如下:
if(m_strRXData==0x31)
{

m_FlashPlayer.LoadMovie(0,"D:\\huagui\\1.swf");
m_strRXData.Delete(0);


}

else if(m_strRXData==0x32)
{

m_FlashPlayer.LoadMovie(0,"D:\\huagui\\2.swf");
m_strRXData.Delete(0);


}

else if(m_strRXData==0x33)
{
m_FlashPlayer.LoadMovie(0,"D:\\huagui\\3.swf");
m_strRXData.Delete(0);


}

else if(m_strRXData==0x34)
{
m_FlashPlayer.LoadMovie(0,"D:\\huagui\\4.swf");
m_strRXData.Delete(0);


}

else if(m_strRXData==0x35)
{
m_FlashPlayer.LoadMovie(0,"D:\\huagui\\5.swf");
m_strRXData.Delete(0);


}

else
{
m_strRXData.Delete(0);

}


程序执行一段时间后,再点击鼠标就会报错,提示指令引用的内存不能read
如图所示
这个代码之前都用过,都没出现过问题。但是这次Flash程序是找别人做的,就出现这种问题了.
这个问题是我程序问题吗?还是MFC程序和Flash程序冲突了?调试程序显示:“没有为Flash32_16_0_0_305.ocx加载符号”
...全文
262 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
likfeng 2015-03-08
  • 打赏
  • 举报
回复
m_strRXData.Delete(0);//m_strRXData是CString的话的确不会引起错误! DEBUG模式运行程序,出错后点重试,看Stack中代码执行到那出的错
qingfeng029 2015-03-08
  • 打赏
  • 举报
回复
引用 2 楼 u011391040 的回复:
看下调用哪个方法报的错,查一下错误码。
提示"Unhandled exception in touying.exe(Flash32_16_0_0_305.OCX): 0xC0000005:Access Violation"
qingfeng029 2015-03-08
  • 打赏
  • 举报
回复
引用 3 楼 likfeng 的回复:
最后一个m_strRXData.Delete(0) 这时m_strRXData为空不就访问冲突了
代码贴错了
void CTouyingDlg::OnOnCommMscomm1() 
{
	// TODO: Add your control notification handler code here
	VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;
    BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
    CString strtemp;
    if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
    {                    ////////以下你可以根据自己的通信协议加入处理代码

        variant_inp=m_ctrlComm.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); //字符型
            strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
            m_strRXData+=strtemp;//加入接收编辑框对应字符串
        }
       UpdateData(FALSE); //更新编辑框内容
       m_ctrlComm.SetInBufferCount(0);

       if(m_strRXData==0x31)
		{  
          
          m_FlashPlayer.LoadMovie(0,"D:\\huagui\\1.swf");
		  m_strRXData.Delete(0);

		 
		}

	   else if(m_strRXData==0x32)
	   {  
		  
          m_FlashPlayer.LoadMovie(0,"D:\\huagui\\2.swf");
		  m_strRXData.Delete(0);

		  
	   }

	   else if(m_strRXData==0x33)
	   {  
	      m_FlashPlayer.LoadMovie(0,"D:\\huagui\\3.swf");
		  m_strRXData.Delete(0);

		  
	  }

	  else if(m_strRXData==0x34)
	  {  
	     m_FlashPlayer.LoadMovie(0,"D:\\huagui\\4.swf");
		  m_strRXData.Delete(0);

		  
	  }
	  
	  else if(m_strRXData==0x35)
	  {  
	      m_FlashPlayer.LoadMovie(0,"D:\\huagui\\5.swf");
		  m_strRXData.Delete(0);

		  
	  } 
	  
      else 
	   {  
    	  m_strRXData.Delete(0);

	   }
	}
	
}
qingfeng029 2015-03-08
  • 打赏
  • 举报
回复
引用 3 楼 likfeng 的回复:
最后一个m_strRXData.Delete(0) 这时m_strRXData为空不就访问冲突了
不好意思,之前代码不全,这是串口事件里的代码,m_strRXData肯定不会为空的,而且我把最后一个去掉还是同样的问题
void CTouyingDlg::OnOnCommMscomm1() 
{
	// TODO: Add your control notification handler code here
	VARIANT variant_inp;
    COleSafeArray safearray_inp;
    LONG len,k;
    BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
    CString strtemp;
    if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
    {                    ////////以下你可以根据自己的通信协议加入处理代码

        variant_inp=m_ctrlComm.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); //字符型
            strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
            m_strRXData+=strtemp;//加入接收编辑框对应字符串
        }
       UpdateData(FALSE); //更新编辑框内容
       m_ctrlComm.SetInBufferCount(0);

       if(m_strRXData==0x31)
		{  
		   m_FlashPlayer.CloseMovie("");
          
          m_FlashPlayer.LoadMovie(0,"D:\\huagui\\1.swf");
		  m_strRXData.Delete(0);

		 
		}

	   else if(m_strRXData==0x32)
	   {  
	      
		   m_FlashPlayer.LoadMovie(""); 
		  
          m_FlashPlayer.LoadMovie(0,"D:\\huagui\\2.swf");
		  m_strRXData.Delete(0);

		  
	   }

	   else if(m_strRXData==0x33)
	   {  
		   m_FlashPlayer.LoadMovie("");
	      m_FlashPlayer.LoadMovie(0,"D:\\huagui\\3.swf");
		  m_strRXData.Delete(0);

		  
	  }

	  else if(m_strRXData==0x34)
	  {  
		  m_FlashPlayer.LoadMovie("");
	     m_FlashPlayer.LoadMovie(0,"D:\\huagui\\4.swf");
		  m_strRXData.Delete(0);

		  
	  }
	  
	  else if(m_strRXData==0x35)
	  {  
		  m_FlashPlayer.LoadMovie("");
	      m_FlashPlayer.LoadMovie(0,"D:\\huagui\\5.swf");
		  m_strRXData.Delete(0);

		  
	  } 
	  
      else 
	   {  
		  m_FlashPlayer.LoadMovie(0,"");
    	  m_strRXData.Delete(0);

	   }
	}
	
}
likfeng 2015-03-07
  • 打赏
  • 举报
回复
最后一个m_strRXData.Delete(0) 这时m_strRXData为空不就访问冲突了
lougd 2015-03-07
  • 打赏
  • 举报
回复
看下调用哪个方法报的错,查一下错误码。
likfeng 2015-03-07
  • 打赏
  • 举报
回复
和“没有为Flash32_16_0_0_305.ocx加载符号”关系不大 最大的可能是最后一个m_strRXData.Delete(0);

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧