PostThreadMessage access violation点对点文件传输,大家帮帮忙啊
我的设计思想是这样的,两个基于CWinThread的thread的对象 sendfile,recvfile。三个基于CSocket的socket的对象,dfilecontrolsend、dfielcontrolrecv和dfile,
做的是点对点的文件传输。实现的流程是这样的
1.sendfile->postthreadmessage(WM_START)
2.然后在sendfile类中响应WM_START消息的函数内调用dfilecontrolsend.sendfilecontrolSend(这里发送的是要发送的文件的信息),
3.socket类中的sendfilecontrolsend中sendto(要发送的文件的信息,remoteaddress)
4.在onreceive中判断是这个消息后,通过执行主对话框中的函数recvfile来确定是否要接收文件,是的话,recvfile->postthreadmessage(WM_STARTsend),
5.然后在recvfile类中的响应WM_STARTsend的函数中调用dfilecontrolrecv发送对方同意接收文件的信息。
但是现在的问题是执行第四步的时候,报错,错误是access violation,指向的错误代码是recvfile->postthreadmessage(WM_STARTsend),如何解决?
前几步都是符合我设计的想法的。帮帮忙啊
这是出错的代码
CString title="文件"+str+" 是否接受?";
CString answer;
if(IDYES == AfxMessageBox(title,MB_YESNO|MB_DEFBUTTON1))
{
//dfileControlSend.CloseSocket();
answer="接受";
}
else
{
AfxMessageBox("OnRecvfilebegin(CString str) reject");
answer="拒绝";
return -1;
}
int ret=recvFile->PostThreadMessage(WM_SENDFILE_SENDFILEBEGIN,(WPARAM)answer.GetBuffer(answer.GetLength()),(LPARAM)answer.GetLength()); answer.ReleaseBuffer();
if (ret==-1) {
AfxMessageBox("向 sendfile回复进程发送 是否同意接收文件的请求错误");
return -1;
}
else{
m_recvFileStart=TRUE;
return 0;