我目前正在使用Visual Studio 2010在win32中开发一个项目。我遇到一个问题,我在资源脚本(.rc)中定义的任何对话框在调用CreateDialog后抛出第一次机会异常如果特定对话框有更多其中包含3个Edittext。这在解决方案中的对话框中是一致的。
内存访问错误不会导致执行停止,但它确实会导致对话框无法在屏幕上呈现。如果我添加DS_NOFAILCREATE样式标志,对话框中的其他控件将呈现,但只有3个Edittext会出现。
当我运行从构建过程创建的应用程序时,所有对话框都按预期呈现,看起来没有抛出第一次机会异常。
任何线索或见解对此都非常有帮助!
发生了什么:
// in my cpp file
HWND myWnd = CreateDialog( hInst, "MY_DIALOG" , pHwnd, (DLGPROC) DlgProc);
//in the header, this setup works fine in other pars of the project
LRESULT CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
在此示例中,myWnd返回NULL,错误代码为0.由于创建过程中的失败,句柄为空,这似乎发生在资源脚本中的第4个Edittext控件上。这会导致在调用ShowWindow()时不显示对话框。
我想知道为什么只有当有4个以上的Edittext控件时,CreateDialog才会抛出此错误。
添加rc文件
MY_DIALOG DIALOGEX 50, 50, 1000, 1000
STYLE DS_SETFONT | WS_CHILD | WS_BORDER | DS_NOFAILCREATE
FONT 8, "MS Sans Serif", 0,0,0x0
BEGIN
EDITTEXT IDC_EDIT1, 222, 33, 40, 14 , ES_CENTER | ES_AUTOHSCROLL
EDITTEXT IDC_EDIT2, 222, 50, 40, 14 , ES_CENTER | ES_AUTOHSCROLL
EDITTEXT IDC_EDIT3, 222, 65, 40, 14 , ES_CENTER | ES_AUTOHSCROLL
EDITTEXT IDC_EDIT4, 222, 85, 40, 14 , ES_CENTER | ES_AUTOHSCROLL
etc...
END
抛出的错误(不会停止执行)是:
First-chance exception at 0x763aa225 in Program.exe: 0xC0000005: Access violation reading location 0x4c41434f
在第三个上面,PER编辑框被抛出2-3次。