Вот что происходит. Когда я пытаюсь запустить AfxMessageBox из моего класса расширения CDialog, я получаю ошибку (см. Ниже). Я погуглил в интернете, но не смог. Это единственное место, где происходит сбой окна сообщений, и я знаю, что остальная часть кода работает (я прошел через это).
Кто-нибудь знает, как это исправить?
Заранее спасибо!
Сообщение об ошибке при открытии AFXMESSAGEBOX:
Необработанное исключение в 0x014b4b70 в IsoPro.exe: 0xC0000005: Место чтения нарушения доступа 0x34333345.
Код для запуска AfxMessageBox, изнутри CDialog
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
:
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 ++, вы можете просто использовать строку учебный класс лайк 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);
Похоже, переменная temp является неинициализированным указателем (определение ЛПЦТР это символ *).
Попробуйте вместо этого определить temp как массив:
TCHAR temp[64];