2 u012654989 u012654989 于 2015.07.22 08:26 提问

各位看一看这代码有什么问题吗?单步执行没有问题,一去掉断点就出错

bool CMyUsbHid::WriteToPort(CString sendData)
{
BOOL bResult;
char strsend[256];
strsend[0]=0;
memset(&strsend,0,256*sizeof(char));
DWORD sendlen=0;
OVERLAPPED m_oswrite;
memset(&m_oswrite,0,sizeof(OVERLAPPED));
m_oswrite.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);

for(int i=0;i<sendData.GetLength();i++)
    strsend[i+1]=sendData.GetAt(i);

Sleep(100);
if (m_devHandle!=INVALID_HANDLE_VALUE)
{
    bResult=WriteFile
        (
        m_devHandle,
        strsend,
        Capabilities.OutputReportByteLength,
        &sendlen,&m_oswrite
        );
    TRACE(_T("%s\r\n"),(CString)(strsend+1));
}
else 
{
    MessageBox(NULL,_T("设备打开失败!"),_T("提示:"),MB_OK);
    return false;
}

if (!bResult)
{
    DWORD dwError=GetLastError();
    switch (dwError)
    {
    case ERROR_IO_PENDING:
        {
        TRACE(_T("write pending\r\n\r\n"));
        break;
        }
    default:
        {
        MessageBox(NULL,_T("数据写入失败!"),_T("提示:"),MB_OK);
        return false;
        }

    }
}
TRACE(_T("Writefile over!"));
return true;

}


这代码有什么问题吗?单步执行没有问题,一去掉断点,运行就出错,发出的数据总是不对,前几天再起他项目中也是用的这个,就没有问题,,,这是为什么呢?
急等啊,,,

4个回答

Evankaka
Evankaka   Ds   Rxr 2015.07.22 08:32

这个应该是指针指错了

u012654989
u012654989 指针指错了?那为什么单步就没有问题呢,还有这代码在另一个项目中没有问题 a
2 年多之前 回复
oyljerry
oyljerry   Ds   Rxr 2015.07.22 08:36

断点会阻塞消息等,而去掉以后就直接运行了。是不是你代码同步等没处理好。

u012654989
u012654989 现在只是用了这样一个发送的函数,其他的都没用到,将程序退出在运行,还是会发送其他的不知道什么东西的东西
2 年多之前 回复
cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2015.07.22 10:44

代码完全相同,但是在你这就报错?,断电又能通过,运行就不行?报错写的啥?

u012654989
u012654989 不是报错,而是通过bus hount监视,发过去的东西跟代码中让他发的不一样,一堆其他的重复的东西比如都是fe,这个样子,断点发送,就没有这个问题
2 年多之前 回复
u012654989
u012654989   2015.07.22 10:49

是不是发送之前应该清理一下hid驱动的缓冲啊?

Csdn user default icon
上传中...
上传图片
插入图片