我有个传输程序编译成为.EXE时很正常,可是转换成为activex后总是包TSTCON32.EXE内存失败具体代码错误在这一块,有需要完整源码的可以发EMAIL到我的EMAIL,他包含一个客户端和一个服务器端
hImageDisplayThread2 = (HANDLE)_beginthreadex(NULL,0, ImageDisplayThread2,(LPVOID)this,0/* CREATE_SUSPENDED*/,0);
unsigned __stdcall CTestMemDlg::ImageDisplayThread2(LPVOID lpParam)
{CString sImagePath("E:\\PHOTO\\logo.JPG");
//打开文件
CFile hImageFile;
CFileException m_exImage;
hImageFile.Open(sImagePath,CFile::modeRead|CFile::typeBinary,&m_exImage);
int nFileLen = hImageFile.GetLength();
CSocketSession ImageSocketSession;
ImageSocketSession.initialize();
SOCKET sTcpSck = ImageSocketSession.TcpSocket();
ImageSocketSession.TcpConnect(SERVER_PORT,SERVER_IP);
//发送文件头
memset((void *)&g_UserMsg,0,sizeof(USERMSG));
_sntprintf(g_UserMsg.szUserID,64,_T("%-64s"),"585858");
//这里要在ACTIVEX控件中获取网页填入的用户ID,用户名
_sntprintf(g_UserMsg.szUserName,64,_T("%-64s"),"[email protected]");
_sntprintf(g_UserMsg.szPassWord,64,_T("%-64s"),"123456");
_sntprintf(g_UserMsg.szImageLen,64,_T("%-64d"),nFileLen);
CString sImageName("1501.JPG");
TCHAR szTmpImageName[128]={0};
strncpy(szTmpImageName,sImageName.GetBuffer(0),128);
_sntprintf(g_UserMsg.szImageName,128,_T("%-128s"),szTmpImageName);
_sntprintf(g_UserMsg.szImageRe,1472,_T("%-1472s"),"@");
ImageSocketSession.TcpSend(sTcpSck,(char *)&g_UserMsg,MSG_PACKET_LEN);
int nTotalCount = 0;
char szImageBuff[MSG_PACKET_LEN+1]={0};
//这里会报内存越界********************
while(nTotalCount < nFileLen)
{
memset(szImageBuff,0,MSG_PACKET_LEN+1);
int nbyte=hImageFile.Read(szImageBuff,MSG_PACKET_LEN);
ImageSocketSession.TcpSend(sTcpSck,szImageBuff,nbyte);
nTotalCount += nbyte;
}//end while
hImageFile.Close();
ImageSocketSession.TcpClose(sTcpSck);
ImageSocketSession.destory();
_endthreadex(0);
return 0;
}
hImageDisplayThread2 = (HANDLE)_beginthreadex(NULL,0, ImageDisplayThread2,(LPVOID)this,0/* CREATE_SUSPENDED*/,0);
unsigned __stdcall CTestMemDlg::ImageDisplayThread2(LPVOID lpParam)
{CString sImagePath("E:\\PHOTO\\logo.JPG");
//打开文件
CFile hImageFile;
CFileException m_exImage;
hImageFile.Open(sImagePath,CFile::modeRead|CFile::typeBinary,&m_exImage);
int nFileLen = hImageFile.GetLength();
CSocketSession ImageSocketSession;
ImageSocketSession.initialize();
SOCKET sTcpSck = ImageSocketSession.TcpSocket();
ImageSocketSession.TcpConnect(SERVER_PORT,SERVER_IP);
//发送文件头
memset((void *)&g_UserMsg,0,sizeof(USERMSG));
_sntprintf(g_UserMsg.szUserID,64,_T("%-64s"),"585858");
//这里要在ACTIVEX控件中获取网页填入的用户ID,用户名
_sntprintf(g_UserMsg.szUserName,64,_T("%-64s"),"[email protected]");
_sntprintf(g_UserMsg.szPassWord,64,_T("%-64s"),"123456");
_sntprintf(g_UserMsg.szImageLen,64,_T("%-64d"),nFileLen);
CString sImageName("1501.JPG");
TCHAR szTmpImageName[128]={0};
strncpy(szTmpImageName,sImageName.GetBuffer(0),128);
_sntprintf(g_UserMsg.szImageName,128,_T("%-128s"),szTmpImageName);
_sntprintf(g_UserMsg.szImageRe,1472,_T("%-1472s"),"@");
ImageSocketSession.TcpSend(sTcpSck,(char *)&g_UserMsg,MSG_PACKET_LEN);
int nTotalCount = 0;
char szImageBuff[MSG_PACKET_LEN+1]={0};
//这里会报内存越界********************
while(nTotalCount < nFileLen)
{
memset(szImageBuff,0,MSG_PACKET_LEN+1);
int nbyte=hImageFile.Read(szImageBuff,MSG_PACKET_LEN);
ImageSocketSession.TcpSend(sTcpSck,szImageBuff,nbyte);
nTotalCount += nbyte;
}//end while
hImageFile.Close();
ImageSocketSession.TcpClose(sTcpSck);
ImageSocketSession.destory();
_endthreadex(0);
return 0;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货