为什么我的非模式对话框在create时出错? [问题点数:20分,结帖人WecanHuang]



  • 不显示删除回复
  • 显示所有回复
  • 显示星级回复
  • 显示得分回复
  • 只显示楼主
  •        收藏



WecanHuang

WecanHuang 等级:

结帖率100%

楼主 发表于: 2007-10-13 15:25:49



代码如下:

if (m_pBBSTestDlg == NULL)       
 {       
 m_pBBSTestDlg = new CBBSTestDlg;       
 if (m_pBBSTestDlg)       
 {       
 m_pBBSTestDlg->Create(IDD_DIALOG_BBS, this);       
 }       
 }       
 m_pBBSTestDlg->ShowWindow(SW_SHOW);       

 运行至m_pBBSTestDlg->Create(IDD_DIALOG_BBS, this);这里会崩溃




对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理


回复次数:23



wltg2001

wltg2001 等级:





2


#1 得分:4 回复于: 2007-10-13 15:29:48



运行至m_pBBSTestDlg- >Create(IDD_DIALOG_BBS, this);这里会崩溃 
===========
this指什么呢?这个参数是定义父窗口的


GMGC全球移动游戏商务对接会



对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



shunruo

凤矶 等级:





#2 得分:4 回复于: 2007-10-13 15:30:49



IDD_DIALOG_BBS
重复了,或资源内容不存在




对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



WecanHuang

WecanHuang 等级:

#3 得分:0 回复于: 2007-10-13 15:38:00



回1楼
this是一个派生自wnd的类


专访黄钊吉:SQL Server现已经向云过渡



对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



WecanHuang

WecanHuang 等级:

#4 得分:0 回复于: 2007-10-13 15:58:43



回2楼
确实是重复了
但是我删掉其中一个之后还是会崩溃





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



crystal28

crystal28 等级:

#5 得分:2 回复于: 2007-10-13 16:15:23



会不会调用OnInitDialog时出错?





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



WecanHuang

WecanHuang 等级:

#6 得分:0 回复于: 2007-10-13 16:18:02



还没到那一步呢
在create时就出错了





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



WecanHuang

WecanHuang 等级:

#7 得分:0 回复于: 2007-10-13 16:55:04



我跟踪到cdialog的create里面
发现m_lpszTemplateName是个错误的指针
请问为什么会这样呢?





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



gofqjyie

誓将天下了然于胸 等级:

#8 得分:2 回复于: 2007-10-13 17:14:17



m_pBBSTestDlg = new CBBSTestDlg;

换别的方法试试,换成类的成员变量方法试之.





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



wltg2001

wltg2001 等级:





2


#9 得分:2 回复于: 2007-10-13 17:18:05



看一下这个资源IDD_DIALOG_BBS所指定的模板是不是有问题





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



WecanHuang

WecanHuang 等级:

#10 得分:0 回复于: 2007-10-13 17:19:04



回9楼
怎么看IDD_DIALOG_BBS所指定的模板





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



WecanHuang

WecanHuang 等级:

#11 得分:0 回复于: 2007-10-13 17:25:34



BOOL AFXAPI _AfxCheckDialogTemplate(LPCTSTR lpszResource, BOOL bInvisibleChild)       
 {       
 ASSERT(lpszResource != NULL);       
 HINSTANCE hInst = AfxFindResourceHandle(lpszResource, RT_DIALOG);       
 HRSRC hResource = ::FindResource(hInst, lpszResource, RT_DIALOG);       
 if (hResource == NULL)       
 {       
 if (DWORD_PTR(lpszResource) > 0xffff)       
 TRACE(traceAppMsg, 0, _T("ERROR: Cannot find dialog template named '%s'.\n"),       
 lpszResource);       
 else       
 TRACE(traceAppMsg, 0, "ERROR: Cannot find dialog template with IDD 0x%04X.\n",       
 LOWORD((DWORD_PTR)lpszResource));       
 return FALSE;       
 。。。。。。。。       
 }



跟踪到这里
FindResource失败,hResource为NULL
最后返回FALSE





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



Z_song

Z_song 等级:

#12 得分:1 回复于: 2007-10-13 17:31:45



楼主的代码本身没有任何问题,肯定是其他地方有问题





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



shunruo

凤矶 等级:





#13 得分:1 回复于: 2007-10-13 17:41:35



退出,删除APS文件,重新编译
再问:是不是DLL?是的话要用AFX_MANAGE_STATE(AfxGetStaticModuleState());





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



WecanHuang

WeanHuang 等级:

#14 得分:0 回复于: 2007-10-13 18:01:37



exe
不是dll





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



wltg2001

wltg2001 等级:





2


#15 得分:1 回复于: 2007-10-13 18:03:19



你的对话框一定有一个对话框资源模板,看一下它的ID之类的是不是正确的。





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



WecanHuang

WecanHuang 等级:

#16 得分:0 回复于: 2007-10-13 18:08:41



声明一下
this是一个CWnd派生的子类
不是对话框





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



WecanHuang

WecanHuang 等级:

#17 得分:0 回复于: 2007-10-13 18:22:01



刚又发现一个现象
release版本没有这个问题
呵呵
那个是断言
那为什么会出现那个断言呢?





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



WecanHuang

WecanHuang 等级:

#18 得分:0 回复于: 2007-10-13 19:42:36



up





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



dyw

dyw 等级:








9



更多勋章


#19 得分:1 回复于: 2007-10-14 22:06:15



建一个测试项目,移植上述代码。





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



WecanHuang

WecanHuang 等级:

#20 得分:0 回复于: 2007-10-15 18:06:08



父窗口是模式对话框
就没这个问题





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



SoftUI

SoftI 等级:

#21 得分:1 回复于: 2007-10-16 14:06:25



我曾经遇到过这样的问题,估计是内存操作方面的问题(我的是函数堆栈被破坏),比如你删除了一个内存对象,你还对它进行存取操作(主要是存破坏了其它数据),这样的问题不好查,有时可能会让你莫名其妙,不知问题出在哪里(调试器指示出错地方的代码并没有问题)





对我有用[0]  丢个板砖[0]  引用 |  举报 |  管理



ScottChinee

ScottChinee 等级:

#22 得分:1 回复于: 2007-10-16 22:28:20



AfxFindResourceHandle()
这个地方?
看看