请问  这句话 还有  其他 写法吗?CcpppacDlg *pChatRooom = (CcpppacDlg *)pParam;
pChatRooom->Ragasdghsd(shshsfrh);

解决方案 »

  1.   

    什么意思?((CcpppacDlg *)pParam)->Ragasdghsd(shshsfrh);
      

  2.   

    还有一种写法:
    (CcpppacDlg *)pParam->Ragasdghsd(shshsfrh);
      

  3.   

    我不会问问     这个函数 老出错 估计 使上面的问题    m_ListBox_Content           是 list box控件
       void CcpppacDlg::Ragasdghsd(CString fhdjhdrj)
    {

    m_ListBox_Content.AddString(fhdjhdrj);}
      

  4.   

    m_ListBox_Content.AddString(fhdjhdrj); 
    到这句话
    出现  坛窗
    Debug Assertion  Failedprogram;
    c:\....................
    Fine:f:\.............\afxwin2.inl
    Line:811
    for information on how your program can cause an assertion
    failuer ,see the visual c++  documentation on assertion
      

  5.   

    DWORD WINAPI ListenThreadFunc(LPVOID pParam)
    {
    CTabPage1 *pChatRoom = (CTabPage1 *)pParam;
    ASSERT(pChatRoom != NULL);
    pChatRoom->m_ListenSock = socket(AF_INET , SOCK_STREAM , IPPROTO_TCP);
    if ( pChatRoom->m_ListenSock == INVALID_SOCKET ) {
    AfxMessageBox(_T("新建Socket失败!"));
    return FALSE;
    } int iPort = pChatRoom->GetDlgItemInt(IDC_EDIT1_pu);
    if ( iPort <= 0 || iPort > 65535 ) {
    AfxMessageBox(_T("请输入合适的端口:1 - 65535"));
    goto __Error_End;
    } sockaddr_in service;
    service.sin_family = AF_INET;
    service.sin_addr.s_addr = INADDR_ANY;
    service.sin_port = htons(iPort); if ( bind(pChatRoom->m_ListenSock, (sockaddr*)&service, sizeof(sockaddr_in)) == SOCKET_ERROR ) {
    AfxMessageBox(_T("绑定端口失败!"));
    goto __Error_End;
    } if( listen(pChatRoom->m_ListenSock, 5) == SOCKET_ERROR ) {
    AfxMessageBox(_T("监听失败!"));
    goto __Error_End;
    }
    pChatRoom->ShowMsg(_T("系统信息:启动服务器成功!"));
    // pChatRoom->m_bIsServer = TRUE;
    // pChatRoom->EnableWindow(IDC_START_SERVER, FALSE);
    // pChatRoom->EnableWindow(IDC_STOP_SERVER); while( TRUE && !(pChatRoom->bShutDown)) {
    if ( SOCKET_Select(pChatRoom->m_ListenSock, 100, TRUE) ) {
    sockaddr_in clientAddr;
    int iLen = sizeof(sockaddr_in);
    SOCKET accSock = accept(pChatRoom->m_ListenSock, (struct sockaddr *)&clientAddr , &iLen);
    if (accSock == INVALID_SOCKET) {
    continue;
    }
    CClientItem tItem;
    tItem.m_Socket = accSock;
    tItem.m_pMainWnd = pChatRoom;
    tItem.m_strIp = inet_ntoa(clientAddr.sin_addr);
    INT_PTR idx = pChatRoom->m_ClientArray.Add(tItem);
    tItem.hThread = CreateThread(NULL, 0, ClientThreadProc, &(pChatRoom->m_ClientArray.GetAt(idx)), CREATE_SUSPENDED, NULL);
    pChatRoom->m_ClientArray.GetAt(idx).hThread = tItem.hThread;
    ResumeThread(tItem.hThread);
    CString strMsg,shshsfrh;
                            shshsfrh=tItem.m_strIp;
    strMsg = _T("客户端:") + tItem.m_strIp + _T(" 进入聊天室!");
    pChatRoom->ShowMsg(strMsg);
    // pChatRoom->SendClientsMsg(strMsg, &tItem); //CcpppacDlg *pChatRooom = (CcpppacDlg *)pParam;
    // pChatRooom->Ragasdghsd(shshsfrh);
    ((CcpppacDlg *)pParam)->Ragasdghsd(shshsfrh);
    Sleep(100);
    }
    }
    __Error_End:
    closesocket(pChatRoom->m_ListenSock);
    return TRUE;
    }
      

  6.   

    错在这里pChatRooom->Ragasdghsd(shshsfrh);参数指针无效。
      

  7.   


    为何pParam既是CTabPage1又是CcpppacDlg类型的指针?
      

  8.   


    楼主,注意了没有:CTabPage1 *pChatRoom = (CTabPage1 *)pParam;
    CcpppacDlg *pChatRooom = (CcpppacDlg *)pParam;上两行,都是取pParam为窗口指针,
    你编译CTabPage1 *pChatRoom = (CTabPage1 *)pParam;正确了
    编译CcpppacDlg *pChatRooom = (CcpppacDlg *)pParam;不正确
    说明pParam不是CcpppacDlg的指针,或者说CTabPage1与CcpppacDlg是不同的窗口
      

  9.   

    我明白了         我怎么获得 CcpppacDlg的指针呢 
      

  10.   

    既然你的两个窗口CTabPage1与CcpppacDlg是不同的窗口那么你要对CTabPage1与CcpppacDlg建立不同的DWORD WINAPI ListenThreadFunc(LPVOID pParam)函数
      

  11.   

    1.如16楼所言,后台线程应尽量少参与显示操作(显示互斥的问题)
    2.CcpppacDlg在哪儿这只有你知道啊我只能猜,你先回答下,这是不是个子窗口?多给点信息
      

  12.   

    对楼主这个功能,我也不赞同在工作线程里直接操纵窗口我的做法是:CTabPage1Dlg; // 窗口类
    CTabPage2Dlg; // 窗口类CTabPage1Page2; // 无窗口类(类名字你自己取)线程中调用无窗口类CTabPage1Page2,在无窗口类CTabPage1Page2中发送消息到不同的窗口CTabPage1Dlg,CTabPage2Dlg
      

  13.   

     是 
    我用了 tab control
    控件
    我的主窗体有个list box
    控件 我想在这个函数里  把ip写道list box
    CcpppacDlg主窗体
    CTabPage1副
    CTabPage2
    CTabPage3
      

  14.   

    你的
    CcpppacDlg主窗体 
    CTabPage1副 
    CTabPage2 
    CTabPage3
    都是不同的窗口。所谓不同的窗口,只要里面的控件数量、类型不同,它就不同,你的调用就会出问题。只能按大家说的,不要在工作线程直接操作窗口。你可以按我上面说的方法(我的做法)去做。或者用发送消息的方式操作窗口。
      

  15.   

    简单地说,不同的窗口CTabPage1Dlg; // 有控件ID_1, ID_2, ID_3
    CTabPage2Dlg; // 只有控件ID_1 当你按你上面的统一的方式操作窗口指针,对两个窗口都是同样的操作,当操作到ID_2时,就会出错,因为CTabPage2Dlg没有ID_2。
      

  16.   

      好久不用了,忘了,能不能debug,不能得话,就慢慢看看代码,每一句读看看,是不是存在,是不是类型匹配,等等。