现在我有以下 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;
}
如你所见,我得到了一个名为UpdateFpgaAttrib 的CDialog Derived 类,我在发出菜单命令时调用的OnItemUpdate 函数中将它实例化,然后DoModal() 弹出Dialog 窗口,在那个对话框上,有一个按钮,当点击它会调用属于View Class的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