Gh0st源码接收消息的静态函数内调用对话框类里的成员变量、函数出现有关问题

Gh0st源码接收消息的静态函数内调用对话框类里的成员变量、函数出现问题
在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()看看