具有4个Edittext控件的Win32内存访问异常

时间:2015-08-12 12:40:06

标签: c++ c winapi win32gui

我目前正在使用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次。

0 个答案:

没有答案