这是怎么回事。当我尝试从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);