为什么单步调试可以得到数据,直接运行却提示错误呢?
水瓶座雨夕 2009-06-05 11:14:43 UINT thread(LPVOID p)
{
CBytHTDlg *byt1 = (CBytHTDlg*)AfxGetApp()->GetMainWnd();
while(1){
byt1->GetData_Class();
::Sleep(1000);
}
// AfxEndThread(0);
return 0;
}
BOOL CBytHTDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
int comport = GetPrivateProfileInt("COM","comport",0,"d:\\byt.ini");
m_com1.SetCommPort(1);
m_com1.SetSettings("9600,n,8,1");
meter.ReleaseBuffer();
m_com1.SetInputMode(1);
m_com1.SetRThreshold(1);
m_com1.SetInBufferSize(2000);
m_com1.SetOutBufferSize(2000);
m_com1.SetInputLen(0);
m_com1.SetPortOpen(TRUE);
m_com1.GetInput();
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CBytHTDlg::OnCommMscomm1()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[4096]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
variant_inp=m_com1.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
{
safearray_inp.GetElement(&k, rxdata + k);//转换为BYTE型数组
}
BYTE btWenHi1, btWenLo1, btShiHi1, btShiLo1;
for(k = 0; k < len; k++) //将数组转换为Cstring型变量
{
BYTE bt = *(char*)(rxdata + k); //字符型
// strtemp.Format("%02X ", bt);
::Sleep(100);//将字符送入临时变量strtemp存放
if(len > 6)
{
if(k == 3)
btShiHi1 = bt;
else if(k == 4)
btShiLo1 = bt;
else if(k == 5)
btWenHi1 = bt;
else if(k == 6)
btWenLo1 = bt;
}
}
if(len > 6)
{
m_fShiDu1 = //(float)
(btShiHi1 * 256 + btShiLo1)/10.0;
m_fWenDu1 = //(float)
(btWenHi1 * 256 + btWenLo1)/10.0;
}
::Sleep(300);
m_fS1 = (m_fS1)/10;
m_fW1 = (m_fW1)/10-273.15;
sS1.Format("%.2f", m_fS1);
sW1.Format("%.2f", m_fW1);
}
void CBytHTDlg::GetData_Class()
{
send();
GetDlgItem(IDC_STATIC_TH1)->SetWindowText(sWe1+" "+sSh1);
}
void CBytHTDlg::send()
{
sendData1 = "01 03 00 00 00 02 C4 0B";
if(m_com1.GetPortOpen())
{
if (!sendData1.IsEmpty())
{
CByteArray hexdata;
int len = String2Hex(sendData1, hexdata); //此处返回的len可以用于计算发送了多少个十六进制数
m_com1.SetOutput(COleVariant(hexdata)); //发送十六进制数据
}
else
{
::AfxMessageBox("没有可以发送的数据");
}
}
else
{
::AfxMessageBox("请先打开串行口");
}
OnCommMscomm1();
}
void CBytHTDlg::OnOK()
{
AfxBeginThread(&thread,0);
}
为什么我F5单步调试的时候一切正常,数据也都有,但是我按ctrl+F5的时候就提示错误
0x7c809793 指令引用的 0x5f588119 内存 该内存不能为written
请教下这是什么原因?????