AfxMessageBox - 访问冲突
AfxMessageBox - Access violation
事情是这样的。当我尝试 运行 来自我的 CDialog 扩展 class 的 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);
看起来变量temp是一个未初始化的指针(the definition of LPTSTR是一个char *)。
尝试将 temp 定义为数组:
TCHAR temp[64];
问题是你如何使用GetWindowText
:
LPTSTR temp;
mainPassword.GetWindowText((LPTSTR)temp,100);
您正在让 GetWindowText
尝试通过未初始化的 temp
指针写入一些 未分配的 内存。如果你真的想使用原始输出缓冲区,你应该分配它的空间在传递一个指针到GetWindowText
之前,例如:
TCHAR temp[100];
mainPassword.GetWindowText(temp, _countof(temp));
// NOTE: No need to LPTSTR-cast
但是,由于您使用的是 C++,您可能只想使用字符串 class,如 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);
事情是这样的。当我尝试 运行 来自我的 CDialog 扩展 class 的 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);
看起来变量temp是一个未初始化的指针(the definition of LPTSTR是一个char *)。
尝试将 temp 定义为数组:
TCHAR temp[64];
问题是你如何使用GetWindowText
:
LPTSTR temp; mainPassword.GetWindowText((LPTSTR)temp,100);
您正在让 GetWindowText
尝试通过未初始化的 temp
指针写入一些 未分配的 内存。如果你真的想使用原始输出缓冲区,你应该分配它的空间在传递一个指针到GetWindowText
之前,例如:
TCHAR temp[100];
mainPassword.GetWindowText(temp, _countof(temp));
// NOTE: No need to LPTSTR-cast
但是,由于您使用的是 C++,您可能只想使用字符串 class,如 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);