能力值:
( LV5,RANK:70 )
|
-
-
2 楼
OD的初衷可不是为了破解,大家包括我在内在程序出错的时候都有个误区都想不起来用OD!
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
麻烦楼上能说的详细些吗,我不太懂。
|
能力值:
( LV5,RANK:70 )
|
-
-
4 楼
就是说用ollyice进行调试,这是调试软件最根本的使命,但现在一提到OD好像就直接想起了破解,而一到程序crash的时候却想不起来用它,这不得不引起我们的反思
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我把接收代码注释掉,就不报错,我感觉是我的接收和发送代码有问题,麻烦大家帮小弟看一下
//发送
void C_ControlMatrix::SendData(BYTE data)
{
DWORD dwError;
DWORD dwRealSend = 0;
//WaitForSingleObject(m_HMutex,INFINITE);
if (ClearCommError(m_HCom,&dwError,NULL))
{
PurgeComm(m_HCom,PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR); //清干净输入、输出缓冲区
}
if (!WriteFile(m_HCom,(VOID*)&data,1,&dwRealSend,&m_WriteOverlapped))
{
if (GetLastError() == ERROR_IO_PENDING)
{
while (!GetOverlappedResult(m_HCom,&m_WriteOverlapped,&dwRealSend,FALSE))
{
if (GetLastError() == ERROR_IO_INCOMPLETE)
{
//cout<<"写未完成,继续!"<
continue;
}
else
{
//cout<<"发生错误,尝试恢复!"<
ClearCommError(m_HCom,&dwError,NULL);
break;
}
}
}
}
//ReleaseMutex(m_HMutex);
}
//接收
int C_ControlMatrix::RecveData(char* pReadBuf)
{
OVERLAPPED os;
DWORD dwError;
DWORD dwErrorFlags;
DWORD dwCommStatus=0;
DWORD dwWantRead = CHANNELCOUNT_16;
DWORD dwRealRead = 0;
memset(&os,0,sizeof(OVERLAPPED));
os.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
if (os.hEvent==NULL)
{
return -1;
}
//WaitForSingleObject(m_HMutex,INFINITE);
if(m_HCom!=NULL)
{
SetCommMask(m_HCom,EV_RXCHAR|EV_TXEMPTY);//有哪些串口事件需要监视
WaitCommEvent(m_HCom,&dwCommStatus,&os);
//检测返回的dwCommStatus,了解发生了什么串口事件
if ((dwCommStatus & EV_RXCHAR)==EV_RXCHAR)//缓冲区中有数据到达
{
COMSTAT ComStat;
DWORD dwLength=0;
ClearCommError(m_HCom,&dwErrorFlags,&ComStat);
dwLength=ComStat.cbInQue; //输入缓冲区有多少数据
if (dwLength>0)
{
BOOL fReadStat;
fReadStat=ReadFile(m_HCom,pReadBuf,dwWantRead,&dwRealRead,&m_ReadOverLapped);
pReadBuf[dwRealRead]='\0';
if (!fReadStat)
{
if (GetLastError()==ERROR_IO_PENDING)
{
while(!GetOverlappedResult(m_HCom,&m_ReadOverLapped,&dwRealRead,TRUE))
{
dwError = GetLastError();
if (dwError==ERROR_IO_INCOMPLETE)
{
continue;
}
}
}
}
}
//ReleaseMutex(m_HMutex);
CloseHandle(os.hEvent);
return dwRealRead;
}
}
//ReleaseMutex(m_HMutex);
CloseHandle(os.hEvent);
return 0;
}
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
一般Debug没事 Release崩掉的 都是因为缓冲区溢出。
|
能力值:
( LV5,RANK:70 )
|
-
-
7 楼
高手出现,果然经验老道,我也有了收获
|
能力值:
( LV5,RANK:70 )
|
-
-
8 楼
楼主用od作为默认调试器,查看一下崩溃时的调用堆栈,可以迅速发现问题,不知道我说的对不对
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
我还是个新手,不会用od
|
能力值:
( LV9,RANK:610 )
|
-
-
10 楼
fReadStat=ReadFile(m_HCom,pReadBuf,dwWantRead,&dwRealRead,&m_ReadOverLapped);
pReadBuf[dwRealRead]='\0';
仔细想一下。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
我是来学习的,看大牛们的高见
|
能力值:
( LV9,RANK:140 )
|
-
-
12 楼
上传代码或者发到我邮箱吧,帮你搞定........... 我邮箱:qinrh#foxmail.com (#换成@)
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
非常感谢大家的关注,问题还是没有解决
我把接收函数里面的 os相关定义和创建去掉
又把WaitCommEvent(m_HCom,&dwCommStatus,&os);中os换成m_ReadOverLapped不报错,但接收不到数据了。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
我也检查了,所有变量都正常初始化了
求解答
|
能力值:
( LV5,RANK:70 )
|
-
-
15 楼
态度还是不诚恳,既不上代码也不传程序,我们无能为力
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
谢谢各位的关注,小弟已经解决了。
不是我不愿意上代码,是不能多上代码,公司有规定,抱歉了各位。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
太难了,看不懂
|
能力值:
( LV5,RANK:70 )
|
-
-
18 楼
一开始你说是自己编的,也没提到公司。公司规定大家理解,但是问题出在何处,最终怎么解决的,楼主也没说啊,不结贴可不是好习惯
|
|
|