情况如下:
1、用Win32写的Directx程序,后来根据需要想加入MFC类库。
2、工程设置里面都设置好了,使用了MFC shared DLL,多线程之类的。
3、插入了对话框资源,保存为资源文件,并加入到了工程,用classwizard生成了一个对应的类CSceneEditDlg。
4、对话框ID经检查对应无误且无重复。问题:如下代码在调用DoMoDal的时候会崩溃,
CSceneEditDlg SceneEditDlg;
if (SceneEditDlg.DoModal() == IDOK)
{}
具体描述如下:Debug Assertion Failed!
FIle:afxwin1.inl
Line:22经step into 发现是里面的AfxGetResourceHandle()抛出的异常,不知道是什么原因,请高手指教!谢谢!
1、用Win32写的Directx程序,后来根据需要想加入MFC类库。
2、工程设置里面都设置好了,使用了MFC shared DLL,多线程之类的。
3、插入了对话框资源,保存为资源文件,并加入到了工程,用classwizard生成了一个对应的类CSceneEditDlg。
4、对话框ID经检查对应无误且无重复。问题:如下代码在调用DoMoDal的时候会崩溃,
CSceneEditDlg SceneEditDlg;
if (SceneEditDlg.DoModal() == IDOK)
{}
具体描述如下:Debug Assertion Failed!
FIle:afxwin1.inl
Line:22经step into 发现是里面的AfxGetResourceHandle()抛出的异常,不知道是什么原因,请高手指教!谢谢!
AFX_MANAGE_STATE(AfxGetStaticModuleState());//加上这句也出现一样的错误
CSceneEditDlg SceneEditDlg;
if (SceneEditDlg.DoModal() == IDOK)
{ }哥们知道的帮帮忙吧!我百度、Google都找不到答案啊
{
AfxWinInit(hInst, NULL, "", 0); //加这一句,我已经测试过 .......
}
揭帖吧
Unhandled exception in Inhabitants.exe(mfc42.DLL):0xc0000005:Access Violation
CSceneEditDlg SceneEditDlg;
SceneEditDlg.Create(IDD_DIALOG_SCENE, NULL);
SceneEditDlg.ShowWindow(true);可是如果用SceneEditDlg.DoModal()却还是会出错,暂时还是不知道原因。
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
CDialog dlg(IDD_ABOUTBOX);
dlg.DoModal();
return 0;
}
不过你那个CDialog dlg(IDD_ABOUTBOX);没问题吗?没有那个构造函数吧?
explicit CDialog(
UINT nIDTemplate,
CWnd* pParentWnd = NULL
);如果在线程中使用DoModal,线程需要用AfxBeginThread创建。
clean/rebuild过了,还是会崩溃,是不是使用MFC还需要初始化什么呢?就像那个AfxWinInit一样。
cnzdgs你说对了,定义一个全局的CWinApp类变量之后的确解决了问题。大概CWinApp的构造函数里面进行了必要的初始化吧。多谢各位捧场,回头一定把分加上!