Теперь у меня есть следующий код приложения MFC SDI, этот код исходит из моего класса представления:
void CNew_demo_appView::OnItemUpdate()
{
// TODO: Add your command handler code here
int i=this->GetListCtrl().GetSelectionMark();//get the selected item no
this->GetDocument()->unpacker.GetInformation(i,(BYTE*)(&(this->GetDocument()->fpga_info)));
UpdateFpgaAttrib updatefpgadlg;
updatefpgadlg.DisplayInfo(this->GetDocument()->fpga_info);
updatefpgadlg.DoModal();
}
void CNew_demo_appView::SetItemFpgaAttrib(int index,FPGA_INFO info)
{
this->GetDocument()->fpga_items[0]=info;
}
Как видите, у меня есть производный класс CDialog с именем UpdateFpgaAttrib, я создаю его экземпляр в функции OnItemUpdate, которая вызывается, когда выдается команда меню, затем DoModal() всплывает диалоговое окно, в этом диалоговом окне есть кнопка, когда щелкнув, он вызовет функцию SetItemFpgaAttrib, которая принадлежит классу представления,
((CNew_demo_appView*)this->GetParent())->SetItemFpgaAttrib(0,info);
вот проблема, когда этот SetItemFpgaAttrib ссылается на некоторые данные с помощью этого указателя, он всегда получает некоторую ошибку нарушения прав доступа, когда я вызываю эту функцию в другой функции класса View, все в порядке,
void CNew_demo_appView::test()
{
SetItemFpgaAttrib(0,this->GetDocument()->fpga_info)
}
при запуске кнопкой всплывающего диалогового окна это вызывает проблему, я установил точку останова на SetItemFpgaAttrib, я обнаружил, что это значение указателя является нормальным 0x0041237f, но при запуске кнопкой оно всегда 0x00000001, вызов GetDocument всегда вызывает проблему . Почему значение указателя this изменилось, это вызвано контекстом или чем-то еще? Я использую Vs2008 SP1