这是怎么回事。当我尝试从CDialog扩展类运行AfxMessageBox时,出现错误(请参见下文)。我已经在互联网上搜索过,但不多。这是消息框唯一失败的地方,我知道其余代码都可以工作(我逐步完成了该步骤)。

有谁知道如何解决这一问题?

提前致谢!

AFXMESSAGEBOX打开时出现错误消息:

IsoPro.exe中0x014b4b70处未处理的异常:0xC0000005:访问冲突读取位置0x34333345。

从CDialog内部启动AfxMessageBox的代码

LPTSTR temp;
mainPassword.GetWindowText((LPTSTR)temp,100);
CString cstr;
cstr.Format("mainPassword = %s",temp);
AfxMessageBox(cstr);

显示CDialog的代码:
CEnterpriseManagementDialog* emd = new CEnterpriseManagementDialog();
emd->Create(IDD_ENTERPRISE_MANAGEMENT_DIALOG);
emd->ShowWindow(SW_SHOW);

最佳答案

问题是您如何使用GetWindowText:



您正在让GetWindowText尝试通过未初始化的temp指针写入一些未分配的内存。如果您确实想使用原始输出缓冲区,则应在传递指向GetWindowText的指针之前为其分配空间,例如:

TCHAR temp[100];
mainPassword.GetWindowText(temp, _countof(temp));
// NOTE: No need to LPTSTR-cast

但是,由于您使用的是C++,因此您可能只想使用CString之类的字符串类,而不要使用原始缓冲区,例如:
CString password;
mainPassword.GetWindowText(password);

CString msg;
msg.Format(_T("mainPassword = %s"), password.GetString());
// or you can just concatenate CStrings using operator+ ...
AfxMessageBox(msg);

08-06 17:12