标题不太准确,我都不知道该怎么说这个问题。我描述一下。
1.建立了一个MFC对话框程序,界面类 CClientDlg。
2.给他添加了一个通信的类 CClientSocket,通信类是基于主对话框类的。
在CClientDlg.h中的声明是CClientSocket *m_pClient
可以在主对话框事件中调用m_pClient->Send( , );发送数据
3.我给住对话框的一个按钮事件加了个子对话框CSetting。重点来了:我想在子对话框中也能用CClientSocket中的Send函数,怎么办。
我把CClientDlg类和CClientSocket类都加进去了。不过一到Send的时候就会异常。
我是这样写的 
CClientDlg *dlg;
dlg->m_pClient->Send( , );但这句话会异常。
如果你们看懂了我的意思,指导我一下啊,分不是问题。主要就是想在子对话框中调用通信类

解决方案 »

  1.   

    自定义消息,CClinentDlg在实现自定义消息中调用Send方法。
      

  2.   

    CClientDlg *dlg;
    dlg->m_pClient->Send( , );但这句话会异常。大哥,你dlg还没有指向一个实体,当然会出错了,用CClientDlg *dlg=(CClientDlg *)AfxGetMainWnd()
      

  3.   

    为什么不直接传入m_pClient指针呢?
    也可以定义消息。
      

  4.   


    up,最好判断dlg指针是否为空,不然很危险~
      

  5.   

    方法1:在CClientDlg中搞一个CClientSocket友元。
    方法2:定义一个CClientDl类对象的全局指针,在CClientSocket调用这个指针。
      

  6.   

    在CSetDlg中这样写就行了!((CClientDlg *)GetParent())->m_pClient->Send()比如你现在依次显示有三个窗口A、B、C,(C在最前)那么你在C中可以这样写:
    ((A *)GetParent())->YourFunInA()
    ((B *)GetParent())->YourFunInB()B中只能写一个:
    ((A *)GetParent())->YourFunInA()
      

  7.   

    通过AfxGetMainWnd可以得到主对话框的指针
    然后你应该会操作了
      

  8.   

    你修改你的子对话框类的构造函数,将你对话框类中的m_pClient作为参数传递给他不就可以了
      

  9.   

    你修改你的子对话框类的构造函数,将你对话框类中的m_pClient作为参数传递给他不就可以了
      

  10.   

    我写掉了,实际上中间是有实体的,在dlg->m_pClient->Send()之前我有dlg = new CClientDlg();
    不过现在解决了,吧CClientSocket声明为静态变量