Gh0st源码接收消息的静态函数内调用对话框类里的成员变量、函数出现有关问题
Gh0st源码接收消息的静态函数内调用对话框类里的成员变量、函数出现问题
在Gh0st 的 static void ProcessReceiveComplete(ClientContext *pContext,CRadDlg * pRadDlg) 函数中加了一个指向对话框的指针pRadDlg,Iocpserver中的NotifyProc接收到数据时调用 ,但为什么使用pRadDlg调用成员函数或成员变量还有发送消息都有错误呢;
运行后,有客户端发送消息过来直接挂了,在调用的地方
如是下详图;供大家参考;
客户端服务端源代码见附件;拜托
void ProcessReceiveComplete(ClientContext *pContext,CRadDlg * pRadDlg);
本来是静态函数,出现上面问题,我改成了全局的,问题同在;
照说静态函数没有this指针,且只能调用静态的东东,但我在参数中传递了一个当前对话框类的指针,照理是可以调用的,但每次一运行到上面第三步就出错,不明真相。。。。
------解决方案--------------------
CRadDlg* pFrame = (CRadDlg*) &lpParam; //CRadDlg的this指针
这个就不对了吧,lpParam是什么呢?
g_iocp = &pFrame->m_iocpServer;这个也不对
怎么向NotifyProc传参数的?
------解决方案--------------------
pRadDlg->PostMessage(WM_ADDTOLIST, 0, (LPARAM)pContext);
用::PostMessage 看看,句柄用pRadDlg->GetSafeHwnd()看看
在Gh0st 的 static void ProcessReceiveComplete(ClientContext *pContext,CRadDlg * pRadDlg) 函数中加了一个指向对话框的指针pRadDlg,Iocpserver中的NotifyProc接收到数据时调用 ,但为什么使用pRadDlg调用成员函数或成员变量还有发送消息都有错误呢;
运行后,有客户端发送消息过来直接挂了,在调用的地方
如是下详图;供大家参考;
客户端服务端源代码见附件;拜托
- C/C++ code
//此处是接收的函数,有客户端发送数据会在此处响应 void CALLBACK CRadDlg::NotifyProc(LPVOID lpParam, ClientContext *pContext, UINT nCode) { try { CRadDlg* pFrame = (CRadDlg*) &lpParam; //CRadDlg的this指针 CString str; g_iocp = &pFrame->m_iocpServer; switch (nCode) { case NC_CLIENT_CONNECT: { } break; case NC_TRANSMIT: break; case NC_RECEIVE: // ProcessReceive(pContext); break; case NC_RECEIVE_COMPLETE: { ProcessReceiveComplete(pContext,pFrame); //第一步,此处返回完整数据时调用 break; } }catch(...){} } 第二步, 本打算通过 pRadDlg调用CRadDlg指针的函数 void ProcessReceiveComplete(ClientContext *pContext,CRadDlg * pRadDlg) { if (pContext == NULL) return; // 如果管理对话框打开,交给相应的对话框处理 CDialog *dlg = (CDialog *)pContext->m_Dialog[1]; switch (pContext->m_DeCompressionBuffer.GetBuffer(0)[0]) { case TOKEN_LOGIN: // 上线包*/ { pRadDlg->PostMessage(WM_ADDTOLIST, 0, (LPARAM)pContext); 第三步,但当新客户端上线时,此处便出错找不出其原因,望各路高人解答; BYTE bToken = COMMAND_ACTIVED; } break; default: closesocket(pContext->m_Socket); break; } }
void ProcessReceiveComplete(ClientContext *pContext,CRadDlg * pRadDlg);
本来是静态函数,出现上面问题,我改成了全局的,问题同在;
照说静态函数没有this指针,且只能调用静态的东东,但我在参数中传递了一个当前对话框类的指针,照理是可以调用的,但每次一运行到上面第三步就出错,不明真相。。。。
------解决方案--------------------
CRadDlg* pFrame = (CRadDlg*) &lpParam; //CRadDlg的this指针
这个就不对了吧,lpParam是什么呢?
g_iocp = &pFrame->m_iocpServer;这个也不对
怎么向NotifyProc传参数的?
------解决方案--------------------
pRadDlg->PostMessage(WM_ADDTOLIST, 0, (LPARAM)pContext);
用::PostMessage 看看,句柄用pRadDlg->GetSafeHwnd()看看