用DoModal调用对话框报错,大家帮忙啊

UPC子夜 2011-01-04 10:42:34
我新建了一个控制台程序,引入了mfc,
use mfc in a shared dll,
调用对话框的时候是这么写的:
CQuestionDlg dlg;
dlg.DoModal();
编译没问题,运行时老是报assert错误,
我调试了一下,初始化时dlg值为空,怎么回事啊?
对话框的构造函数是这么写的
CQuestionDlg::CQuestionDlg(CWnd* pParent)
: CDialog(CQuestionDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CQuestionDlg)
m_Question = _T("");
//}}AFX_DATA_INIT
}
谢谢大家了
...全文
306 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
tywldx 2012-08-08
  • 打赏
  • 举报
回复
楼主试一下,把#include"*.h"跟CQuestionDlg dlg;
都放在头文件里面,再编译试试!
UPC子夜 2011-01-07
  • 打赏
  • 举报
回复
换成非模态对话框了,虽然有assert,调试不方便,但是不影响发布版使用,该问题先跳过去吧,谢谢大家的帮助,分值不多,平分了吧
wltg2001 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 arong1234 的回复:]
这显然是MFC相关的运行库没设置好,你的起点不对,不要从console开始

引用 8 楼 upc05070000 的回复:
好像是AfxGetResourceHandle()这个函数里边报的错,明天接着看吧 谢谢大家了
[/Quote]
我用VS2005试了一下,在控制台中用MFC不用作什么设置的,当然新建工程时选用用MFC。然后直接用就行了。
楼主的代码肯定没有问题,楼主将你的对话框类的代码贴出来看看。
UPC子夜 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 summer_0123 的回复:]
把报错贴出来看看
[/Quote]
unMDlg.DoModal()
step之后是
AfxGetResourceHandle()
再之后是
_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetResourceHandle()
{ ASSERT(afxCurrentResourceHandle != NULL);
return afxCurrentResourceHandle; }
里边的assert出的错
arong1234 2011-01-04
  • 打赏
  • 举报
回复
读懂人家的代码,移植进对话框工程,恐怕要快许多
arong1234 2011-01-04
  • 打赏
  • 举报
回复
我估计所谓的研究就是看看MFC怎么初始化,恐怕这种东西绝大多数人都没搞过。要是你愿意花时间做这种无用功,就慢慢研究:)[Quote=引用 14 楼 upc05070000 的回复:]
引用 11 楼 arong1234 的回复:
这显然是MFC相关的运行库没设置好,你的起点不对,不要从console开始

引用 8 楼 upc05070000 的回复:
好像是AfxGetResourceHandle()这个函数里边报的错,明天接着看吧 谢谢大家了

但是我现在要一个东西,从网上下的就是console的代码,所以我就想先在这个基础上改一改
我平时就是用mfc的,所以……
[/Quote]
UPC子夜 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 arong1234 的回复:]
这显然是MFC相关的运行库没设置好,你的起点不对,不要从console开始

引用 8 楼 upc05070000 的回复:
好像是AfxGetResourceHandle()这个函数里边报的错,明天接着看吧 谢谢大家了
[/Quote]
但是我现在要一个东西,从网上下的就是console的代码,所以我就想先在这个基础上改一改
我平时就是用mfc的,所以用console的东西不大会
但是现在还是先把这个问题解决吧
UPC子夜 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wltg2001 的回复:]
引用 8 楼 upc05070000 的回复:
好像是AfxGetResourceHandle()这个函数里边报的错,明天接着看吧 谢谢大家了

你的CAnswerQuestionDlg类是如何创建的啊,手工的还是用向导的啊?
[/Quote]
在资源编辑器中手动建的
summer_0123 2011-01-04
  • 打赏
  • 举报
回复
把报错贴出来看看
arong1234 2011-01-04
  • 打赏
  • 举报
回复
这显然是MFC相关的运行库没设置好,你的起点不对,不要从console开始
[Quote=引用 8 楼 upc05070000 的回复:]
好像是AfxGetResourceHandle()这个函数里边报的错,明天接着看吧 谢谢大家了
[/Quote]
wltg2001 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 upc05070000 的回复:]
好像是AfxGetResourceHandle()这个函数里边报的错,明天接着看吧 谢谢大家了
[/Quote]
你的CAnswerQuestionDlg类是如何创建的啊,手工的还是用向导的啊?
wltg2001 2011-01-04
  • 打赏
  • 举报
回复
CAnswerQuestionDlg unMDlg;//走完这一句时,unMDlg 的值为 CAnswerQuestionDlg hWnd=0x00000000
============
这个很正常,此时对话框还没有创建呢,当然没有句柄了。
UPC子夜 2011-01-04
  • 打赏
  • 举报
回复
好像是AfxGetResourceHandle()这个函数里边报的错,明天接着看吧 谢谢大家了
arong1234 2011-01-04
  • 打赏
  • 举报
回复
我相信使用MFC需要一堆设定的(虽然我也不知道哪些具体设定),因此你这种设置是不行的。作为初学者,还是从标准的工程开始写,而不是创造一些困难条件故意让自己做不下去。你应该从对话框工程开始,而不是console[Quote=引用 6 楼 upc05070000 的回复:]
引用 4 楼 arong1234 的回复:
别听他瞎说,不需要任何window
我觉得错误不在这儿,别的地方有错
mfc你是怎么引入的?控制台程序显示对话框本来就不合理,为什么不是MFC程序?

引用 2 楼 upc05070000 的回复:
引用 1 楼 xiaoguailong3 的回复:
dlg声明初始化错误,要传一个CWnd*进去才行

CWnd *wnd = CWnd:……
[/Quote]
UPC子夜 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 arong1234 的回复:]
别听他瞎说,不需要任何window
我觉得错误不在这儿,别的地方有错
mfc你是怎么引入的?控制台程序显示对话框本来就不合理,为什么不是MFC程序?

引用 2 楼 upc05070000 的回复:
引用 1 楼 xiaoguailong3 的回复:
dlg声明初始化错误,要传一个CWnd*进去才行

CWnd *wnd = CWnd::FromHandle(hWndMain);
……
[/Quote]
我从网上找的一个程序,想添加对话框
引入就是在project-settings-general-use mfc in a shared dll添加的
UPC子夜 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wltg2001 的回复:]
代码没看出什么问题出来,你确定是dlg.DoModal();出错?
[/Quote]
CAnswerQuestionDlg unMDlg;//走完这一句时,unMDlg 的值为 CAnswerQuestionDlg hWnd=0x00000000
if(IDOK == unMDlg.DoModal())//在这一步step进去,就是
int CDialog::DoModal()
{
// can be constructed with a resource template or InitModalIndirect
ASSERT(m_lpszTemplateName != NULL || m_hDialogTemplate != NULL ||
m_lpDialogTemplate != NULL);

// load resource as necessary
LPCDLGTEMPLATE lpDialogTemplate = m_lpDialogTemplate;
HGLOBAL hDialogTemplate = m_hDialogTemplate;
HINSTANCE hInst = AfxGetResourceHandle();//该处报错
}
arong1234 2011-01-04
  • 打赏
  • 举报
回复
别听他瞎说,不需要任何window
我觉得错误不在这儿,别的地方有错
mfc你是怎么引入的?控制台程序显示对话框本来就不合理,为什么不是MFC程序?[Quote=引用 2 楼 upc05070000 的回复:]
引用 1 楼 xiaoguailong3 的回复:
dlg声明初始化错误,要传一个CWnd*进去才行

CWnd *wnd = CWnd::FromHandle(hWndMain);
我在第一行前加了这一句,hmainWnd是主窗体的句柄,怎么还是不行啊?
[/Quote]
wltg2001 2011-01-04
  • 打赏
  • 举报
回复
代码没看出什么问题出来,你确定是dlg.DoModal();出错?
UPC子夜 2011-01-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiaoguailong3 的回复:]
dlg声明初始化错误,要传一个CWnd*进去才行
[/Quote]
CWnd *wnd = CWnd::FromHandle(hWndMain);
我在第一行前加了这一句,hmainWnd是主窗体的句柄,怎么还是不行啊?
xiaoguailong3 2011-01-04
  • 打赏
  • 举报
回复
dlg声明初始化错误,要传一个CWnd*进去才行

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧