一个超难的问题.出错居然是在lpBuf[dwAddress+i]=iData这样的语句. 请大家对程序的稳定性提点建议
BOOL CFileConvert::Mif2Bin(CFile * m_lpTarget,CStdioFile * m_lpSoure)
{
char * lpBuf=new char[m_lpTarget->GetLength()/2+100];
memset(lpBuf,0,m_lpTarget->GetLength()/2+100);
DWORD dwWriteLen=ConverToBin(lpBuf,m_lpTarget,m_lpSoure);
m_lpTarget->WriteHuge(lpBuf,dwWriteLen);
return TRUE;
}
DWORD CFileConvert::ConverToBin(LPSTR lpBuf,CFile * m_lpSoure,CStdioFile * m_lpTarge)
{
CString m_ReadString;
BOOL bEnd;
DWORD dwAddress;
UINT nLen;
UINT nPos=0;
UINT nProgressLenght=0;
while(m_lpTarge->ReadString(m_ReadString)){
nProgressLenght++;
}
SetProgressLenght(nProgressLenght/0x800);
m_lpTarge->SeekToBegin();
char * lpRead=new char[255];
do{
memset(lpRead,0,255);
m_lpTarge->ReadString(lpRead,255);
if(strlen(lpRead)==0) break;
TRACE("%s\n",lpRead);
if(*(lpRead+1)=='1'||*(lpRead+1)=='2'||*(lpRead+1)=='3')
{
char lpAddress[9]="";
memcpy(lpAddress,lpRead+4,(*(lpRead+1)+1-'0')*2);
dwAddress=strtoul(lpAddress,NULL,16);
static UINT dwHeadAddress=dwAddress;
char lpLen[3]="";
memcpy(lpLen,lpRead+2,2);
nLen=strtoul(lpLen,NULL,16)-5;
SetProgress(nPos/0x800);
FillBin(lpBuf,dwAddress-dwHeadAddress,lpRead+12,nLen);
nPos++;
}
}while(bEnd);
delete []lpRead;
if(bExchangeHILO) ExChangeHiLo(lpBuf,dwAddress+nLen);
return dwAddress+nLen;
}
void CFileConvert::FillBin(LPSTR lpBuf, DWORD dwAddress, LPCSTR lpRead, UINT nLen)
{
char lpData[3]="";
BYTE iData;
for(UINT i=0;i<nLen-1;i++){
memcpy(lpData,lpRead+i*2,2);
iData=strtoul(lpData,NULL,16);
lpBuf[dwAddress+i]=iData;
}
TRACE("0x%x___0x%x\n",lpBuf+dwAddress+i,iData);
}
这三个函数实现文件格式转换功能. 一般是把一个10M左右的mif读入.再转成一种BIN格式.
本来上一个版本.是没有任何.能正常使用.
现在这个版本改了一点代码.与这些代码无任何相关内容..
但是新的这个版本出现无效的句柄访问.
PS: 如果把第三个函数的 lpBuf[dwAddress+i]=iData; 这句注释掉.运行正常...