关闭模态对话框关闭报错,找不到为什么,新手求教。

CrossGrave 2016-05-19 01:44:37
个人觉得是销毁模态对话框的时候的问题,可能是某个变量没有释放导致,但是具体原因找不到,我也只使用了一个指针变量而已,如果我直接最后delete掉这个变量的话窗口打开就会自动关闭了。报错如下:


如果我选择重试,进入调试程序,会在如下图处中断:


其中这个模态对话框中的代码只有在OnInitDialog中调用了如下:
#define GET_WINHTTP_STRING(IWinHttpRequestPtr_Obj,CString_Obj){\
_variant_t varBody=IWinHttpRequestPtr_Obj->GetResponseBody();\
ULONG datalen=varBody.parray->rgsabound[0].cElements;\
char* pContent = (char*)varBody.parray->pvData;\
CString_Obj=pContent;}


CString GetMidSteByLAndR(CString strBuffer, CString strLeft, CString strRight)
{
CString strRet;
int iStart, iEnd;
if (strBuffer.Find(strLeft) != -1)
{
iStart = strBuffer.Find(strLeft);
iStart += strLeft.GetLength();
if (strBuffer.Find(strRight, iStart) != -1)
{
iEnd = strBuffer.Find(strRight, iStart);
strRet=strBuffer.Mid(iStart,iEnd-iStart);
return strRet;
}
}
return strRet;
}
BOOL CMyDialog_GN::OnInitDialog()
{
CDialogEx::OnInitDialog();

// TODO: 在此添加额外的初始化
//获取父窗口指针,用来取得网站链接信息
CString strGetUrl;
Cfeifeicms网站应用Dlg* m_pPWnd = (Cfeifeicms网站应用Dlg*)GetParent();
strGetUrl = m_pPWnd->strUrl;
//判断链接是否有加斜杠
if (strGetUrl.Right(1) == _T("/"))
strGetUrl += _T("index.php?s=Admin-Admin-Config");
else
strGetUrl += _T("/index.php?s=Admin-Admin-Config");
//打开请求链接
HRESULT hr=m_pPWnd->m_pHttpReq->Open(_T("GET"),strGetUrl.AllocSysString());
if (FAILED(hr))
return FALSE;

hr = m_pPWnd->m_pHttpReq->Send();
if (FAILED(hr))
return FALSE;
//获取网页返回内容
_bstr_t bstrRes = m_pPWnd->m_pHttpReq->ResponseText;
CString strCntRes = bstrRes;

//调试用的对话框
SetDlgItemText(IDC_EDIT1, strCntRes);
//获取指定网页内容和显示到界面上
CString strWZMC= GetMidSteByLAndR(strCntRes,_T("id=\"site_name\" value=\""),_T("\""));
CString strWZYM= GetMidSteByLAndR(strCntRes, _T("id=\"site_url\" value=\""), _T("\""));
CString strAZLJ= GetMidSteByLAndR(strCntRes, _T("id=\"site_path\" value=\""), _T("\""));
CString strBNXX= GetMidSteByLAndR(strCntRes, _T("id=\"site_icp\" value=\""), _T("\""));
CString strZZYX= GetMidSteByLAndR(strCntRes, _T("id=\"site_email\" value=\""), _T("\""));
CString strZDGJZ= GetMidSteByLAndR(strCntRes, _T("id=\"site_keywords\" value=\""), _T("\""));
CString strZDMS = GetMidSteByLAndR(strCntRes, _T("id=\"site_description\" value=\""), _T("\""));
SetDlgItemText(IDC_EDIT_DLG_FUNCTION_WZMC, strWZMC);
SetDlgItemText(IDC_EDIT_DLG_FUNCTION_WZYM, strWZYM);
SetDlgItemText(IDC_EDIT_DLG_FUNCTION_AZLJ, strAZLJ);
SetDlgItemText(IDC_EDIT_DLG_FUNCTION_BNXX, strBNXX);
SetDlgItemText(IDC_EDIT_DLG_FUNCTION_ZZYX, strZZYX);
SetDlgItemText(IDC_EDIT_DLG_FUNCTION_ZDGJZ, strZDGJZ);
SetDlgItemText(IDC_EDIT_DLG_FUNCTION_ZDMS, strZDMS);
return TRUE;
// return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}


目前不知道错误出在哪里了,不能上传附件所以没法都发出来。请大神知道一下是哪里的问题,另外代码有哪些是多余或者写法有问题的请指出,谢谢各位。
...全文
256 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
祸起蛋炒饭 2016-07-10
1L说的在理 你点击重试 然后在下面用调用堆栈 就能找到是哪一块出错了
回复
赵4老师 2016-05-23
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
回复
CrossGrave 2016-05-23
引用 7 楼 oyljerry 的回复:
在OnInitDialog中打断点,看是否有什么地方触发了错误
我分别在子对话框中和父对话框中都使用断点,没有发现错误弹出错误,使用了try 和 catch 分别包含了子对话框中和父对话框中的所有语句,但是每次关闭的时候依然会报错。如果同一个程序报错的时候我点了忽略的话,这个程序也不会崩溃后面运行依旧正常。catch抓的是(...)
回复
oyljerry 2016-05-20
在OnInitDialog中打断点,看是否有什么地方触发了错误
回复
Eleven 2016-05-20
引用 5 楼 CrossGrave 的回复:
[quote=引用 4 楼 VisualEleven 的回复:] Debug调试模式下打开call stack,看看函数调用堆栈吧,先找到出错的函数调用~
出错的堆栈调用的函数是InitInstance()的第75行,也就是我发出来图片的INT_PTR nResponse = dlg.DoModal();处.目前我不知道为什么会出错,应该修改哪里。[/quote] 看call stack窗口,从上往下找~
回复
CrossGrave 2016-05-20
引用 4 楼 VisualEleven 的回复:
Debug调试模式下打开call stack,看看函数调用堆栈吧,先找到出错的函数调用~
出错的堆栈调用的函数是InitInstance()的第75行,也就是我发出来图片的INT_PTR nResponse = dlg.DoModal();处.目前我不知道为什么会出错,应该修改哪里。
回复
Eleven 2016-05-19
Debug调试模式下打开call stack,看看函数调用堆栈吧,先找到出错的函数调用~
回复
看调用堆栈吧。
回复
oyljerry 2016-05-19
你对话框创建的时候有没有new,是否对应delete
回复
zgl7903 2016-05-19
点击重试, 结合堆栈调试解决之
回复
相关推荐
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2016-05-19 01:44
社区公告
暂无公告