vc 在A对话框上点击按钮弹出B对话框,然后获取B对话框控件指针为空

A对话框中实例化B对话框,并调用B对话框成员函数SetCOMPort();voidCDialogOnDialogDlg::OnButtonSetting(){//TODO... A对话框中实例化B对话框,并调用B对话框成员函数SetCOMPort();
void CDialogOnDialogDlg::OnButtonSetting()
{
// TODO: Add your control notification handler code here
CCOMSetting dlgCOMSetting;
int nResponse = dlgCOMSetting.DoModal();
if(IDOK == nResponse)
{
dlgCOMSetting.SetCOMPort();
}
else if(IDCANCEL == nResponse)
{
return;
}
}

B对话框成员函数定义如下:
UINT CCOMSetting::SetCOMPort()
{
CComboBox *pComboBox = NULL;
pComboBox = (CComboBox *)GetDlgItem(IDC_COMBO_COMPORT);
pComboBox->GetCount();
return 1;
}

问题如下:
B对话框能成功显示,但执行完pComboBox = (CComboBox *)GetDlgItem(IDC_COMBO_COMPORT);后,pComboBox为空,导致下一语句pComboBox->GetCount();执行内存访问越界。
展开
 我来答
bhtzu
2013-10-14 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4066万
展开全部
在CCOMSetting的OnOK函数中调用SetCOMPort,并将需要的值保存在一个对话框的自定义public成员变量中,在DoModal返回后,只需要访问b.xxx取值就可以了。

你报错是因为DoModal函数返回后,对话框窗体已经销毁,不能访问控件指针了,访问就会报错。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式