创建了一个基于对话框的MFC程序,然后又插入了一个对话框(注册的类为CAddDVR),该对话框上有一个ip控件(m_ip),和两个编辑框控件(m_name和m_password,用户名和密码),还有一个确定按钮和一个取消按钮,代码如下:
CAddDVR dlg;
            CString ip,name,password;
if(dlg.DoModal()==IDOK)
{
         BYTE b1,b2,b3,b4;
dlg.m_ip.GetAddress(b1,b2,b3,b4);
ip.Format("%d.%d.%d.%d",b1,b2,b3,b4);
dlg.m_name.GetWindowText(name);
                  dlg.m_password.GetWindowText(password);
}
这样编译没问题,可以运行,但是我输入ip地址,用户名和密码后,单击确定程序立马异常终止,检查n遍了,真快崩溃了,特来请教各位大牛啊

解决方案 »

  1.   

    在CAddDVR onok里面作这些事,然后,保存成变量,供外部取用!
      

  2.   

    +或者把CString ip,name,password;
    的指针或引用传入CAddDVR,作为CAddDVR的参数
    然后在CAddDVR的onok中给他们赋值
      

  3.   

    你点了OK(IDOK)是,对话框就销毁了吧。
      

  4.   

    对话框是销毁了,但是销毁时他的返回值是IDOK和DoModal()的返回值一致,if语句成立,会执行下面的语句的,或许有人会说对话框已经销毁了这些控件的就不存在了,但是我很多教科书上的例子都是这样的做的,都没问题啊
      

  5.   

    我来说下理由看看你能否听懂:
    DoModal()函数是一个阻塞类型的函数,在它调用的对话框界面关闭之前,此函数后面的语句无法执行,而你把获取数据的代码写在了此函数的后面
    dlg.m_ip.GetAddress(b1,b2,b3,b4);//注意这句代码会直接从界面控件上去取得数据
    当点击确定按钮后,对话框界面就关闭(但是对象还在的),所以执行获取界面上数据的代码会出错.解决:
    我上面讲了虽然界面不在了,但是对象还在,你在那个对话框类中加几个成员变量,点击确定时先给这几个变量赋值,后面就能使用这几个变量中的数据了.